前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android集成腾讯X5内核浏览功能

Android集成腾讯X5内核浏览功能

作者头像
治电小白菜
发布2022-07-08 08:03:06
2.3K0
发布2022-07-08 08:03:06
举报
文章被收录于专栏:技术综合技术综合

集成SDK参考:https://x5.tencent.com/docs/access.html

需求:实现本地文件的浏览,包括不限于PDF,WORD,EXECEL等等

1、引入依赖

implementation 'com.tencent.tbs:tbssdk:44165'

2、创建三个类

代码语言:javascript
复制
public class X5App {
    public void initX5app(Context context){
        //设置非wifi条件下允许下载X5内核
        QbSdk.setDownloadWithoutWifi(true);

        //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
        QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
            @Override
            public void onViewInitFinished(boolean arg0) {
                //x5內核初始化完成的回调,true表x5内核加载成功,否则表加载失败,会自动切换到系统内核。
                Log.d("app", " 内核加载 " + arg0);
            }
            @Override
            public void onCoreInitFinished() {
            }
        };

        //x5内核初始化接口
        QbSdk.initX5Environment(context,  cb);
    }
}
代码语言:javascript
复制
public class X5WebView extends WebView {
    private WebViewClient client = new WebViewClient() {
        /**
         * 防止加载网页时调起系统浏览器
         */
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    };
    @SuppressLint("SetJavaScriptEnabled")
    public X5WebView(Context arg0, AttributeSet arg1) {
        super(arg0, arg1);
        this.setWebViewClient(client);
        initWebViewSettings();
        this.getView().setClickable(true);
    }
    private void initWebViewSettings() {
        WebSettings mWebSettings = this.getSettings();
        mWebSettings.setJavaScriptEnabled(true);
        mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        mWebSettings.setAllowFileAccess(true);
        mWebSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
        mWebSettings.setSupportZoom(true);
        mWebSettings.setBuiltInZoomControls(true);
        mWebSettings.setUseWideViewPort(true);
        mWebSettings.setSupportMultipleWindows(true);
        mWebSettings.setAppCacheEnabled(true);
        mWebSettings.setDomStorageEnabled(true);
        mWebSettings.setGeolocationEnabled(true);
        mWebSettings.setAppCacheMaxSize(Long.MAX_VALUE);
        mWebSettings.setPluginState(WebSettings.PluginState.ON_DEMAND);
        mWebSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
    }
    public X5WebView(Context arg0) {
        super(arg0);
        setBackgroundColor(85621);
    }
}
代码语言:javascript
复制
public class X5TbsFileServicePage extends AppCompatActivity implements TbsReaderView.ReaderCallback {

    private String tbsReaderTemp = Environment.getExternalStorageDirectory() + "/TbsReaderTemp";
    TbsReaderView mTbsReaderView;
    RelativeLayout mRelativeLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_x5_tbs_file_service_page);
        // 绑定容器
        mRelativeLayout = findViewById(R.id.X5TbsView);
//        FileModel fileModel = new FileModel();
//        fileModel.setPath("/storage/emulated/0/demo/word.docx");
//        displayFile(fileModel);
    }

    public void displayFile(FileModel fileModel) {
        mTbsReaderView = new TbsReaderView(this,this);
        //增加下面一句解决没有TbsReaderTemp文件夹存在导致加载文件失败
        String bsReaderTemp = tbsReaderTemp;
        File bsReaderTempFile =new File(bsReaderTemp);

        if (!bsReaderTempFile.exists()) {
            Log.d("print","文件不存在准备创建/TbsReaderTemp!!");
            boolean mkdir = bsReaderTempFile.mkdir();
            if(!mkdir){
                Log.d("print","创建/TbsReaderTemp失败!!!!!");
            }
            Toast.makeText(this,"文件不存在!",Toast.LENGTH_SHORT).show();
        }
        mRelativeLayout.addView(mTbsReaderView,new RelativeLayout.LayoutParams(-1,-1));
        Bundle bundle = new Bundle();
        bundle.putString("filePath",fileModel.getPath());
        bundle.putString("tempPath", tbsReaderTemp);
        boolean result = mTbsReaderView.preOpen(getFileType("word.docx"), false);
        Log.d("print","查看文档---"+result);
        if (result) {
            mTbsReaderView.openFile(bundle);
        }else{

        }
    }

    private String getFileType(String paramString) {
        String str = "";

        if (TextUtils.isEmpty(paramString)) {
            Log.d("print", "paramString---->null");
            return str;
        }
        Log.d("print", "paramString:" + paramString);
        int i = paramString.lastIndexOf('.');
        if (i <= -1) {
            Log.d("print", "i <= -1");
            return str;
        }

        str = paramString.substring(i + 1);
        Log.d("print", "paramString.substring(i + 1)------>" + str);
        return str;
    }

    @Override
    public void onCallBackAction(Integer integer, Object o, Object o1) {
        Log.i("触摸监听:"," ");
    }

    /**
     * 返回上个页面
     * @param keyCode
     * @param event
     * @return
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        return super.onKeyDown(keyCode, event);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mTbsReaderView != null) {
            mTbsReaderView.onStop();
            mTbsReaderView.destroyDrawingCache();
        }
    }

}

3、在Application中的OnCreate方法中进行初始化

代码语言:javascript
复制
new X5App().initX5app(mContext);

4、使用

通过点击事件触发预览 Kotlin版

代码语言:javascript
复制
            //预览事件
            stvOpen.setOnClickListener(View.OnClickListener {
                val extraParams = HashMap<String, String>()
                extraParams["style"] = "1"
                extraParams["local"] = "true"
                QbSdk.openFileReader(this, fileName?.absolutePath, extraParams, object : ValueCallback<String?> {
                    override fun onReceiveValue(s: String?) {
                        Log.e("TAG", "OpenFile Callback: $s")
                        if ("openFileReader open in QB" == s || "filepath error" == s || "TbsReaderDialogClosed" == s || "fileReaderClosed" == s) {
                            QbSdk.closeFileReader(me)
                        }
                    }
                })
            })
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、引入依赖
  • 2、创建三个类
  • 3、在Application中的OnCreate方法中进行初始化
  • 4、使用
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档