基于腾讯TBS 实现应用内打开并浏览Office文件

腾讯浏览服务官网 https://x5.tencent.com/tbs/index.html

配置:下载sdk,并导入jar文件和so文件
导入jar文件.png
基于腾讯TBS 实现应用内打开并浏览Office文件_第1张图片
导入so文件.png
android {
  ...
  defaultConfig {
    ...
    // 这里比较坑,当时用极光推送把64位的ndk库也加上了,x5内核初始化一直失败
    // 这里要去掉所有64位库,x5内核才能加载成功
    ndk {
       abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
    }
  }

}
    
    
    
    
    

Application进行初始化

        //初始化X5内核
        QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
            @Override
            public void onCoreInitFinished() {
                //x5内核初始化完成回调接口,此接口回调并表示已经加载起来了x5,有可能特殊情况下x5内核加载失败,切换到系统内核。
                Log.e("@@","加载内核是否onCoreInitFinished成功:");
            }

            @Override
            public void onViewInitFinished(boolean b) {
                //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
                Log.e("@@","加载内核是否成功:"+b);
            }
        });

如何使用

主要用到这个类TbsReaderView来打开文件,这个View必须用代码动态创建

    private void openFile(String path) {
        //通过bundle把文件传给x5,打开的事情交由x5处理
        Bundle bundle = new Bundle();
        //传递文件路径
        bundle.putString("filePath", path);
        //临时的路径
        bundle.putString("tempPath", Environment.getExternalStorageDirectory() + File.separator + "temp");
        TbsReaderView readerView = new TbsReaderView(this, new TbsReaderView.ReaderCallback() {
            @Override
            public void onCallBackAction(Integer integer, Object o, Object o1) {

            }
        });
        //加载文件前的初始化工作,加载支持不同格式的插件
        boolean b = readerView.preOpen(getFileType(path), false);
        if (b) {
            readerView.openFile(bundle);
        }
        // 往容器里添加TbsReaderView控件
        frameLayout.addView(readerView);
    }
    /***
     * 获取文件类型
     *
     * @param path 文件路径
     * @return 文件的格式
     */
    private String getFileType(String path) {
        String str = "";

        if (TextUtils.isEmpty(path)) {
            return str;
        }
        int i = path.lastIndexOf('.');
        if (i <= -1) {
            return str;
        }
        str = path.substring(i + 1);
        return str;
    }
@Override
protected void onDestroy() {
  super.onDestroy();

  // 一定要调用此方法,才能选择下一个文件预览
  // 否则显示loading而不展示
  // 适当的位置调用此方法
  readerView.onStop();
}

可通过getX5WebViewExtension()方法判断当前设备是否支持x5内核

import com.tencent.smtt.sdk.WebView;
public class X5WebView extends WebView {

    public X5WebView(Context context) {
        super(context);
    }
}
不为null则支持x5内核
new X5WebView(this).getX5WebViewExtension() != null

你可能感兴趣的:(基于腾讯TBS 实现应用内打开并浏览Office文件)