腾讯TBS 打开office

Office文件在app内部打开,相信大家一搜这个问题很多都是腾讯的TBS,而腾讯的TBS文档写的比TM屎还要臭,然后我就在各种论坛上寻找打开office的方法,折磨了我三天最终在最后一天选择放弃TBS,也彻底把我整崩溃了,终于在周一上班的时候搞出来了,接下来给大家详细讲解一下TBS的使用。

第一步:下载TBS的SDK:

https://x5.tencent.com/tbs/sdk.html

第二步:引用到Android工程中:

implementation files(‘libs/tbs_sdk_thirdapp_v4.3.0.375_44275_sharewithdownloadwithfile_withoutGame_obfs_20230104_145521.jar’)

ndk {
  //  abiFilters "armeabi-v7a"
    abiFilters 'armeabi', "armeabi-v7a",  'x86'
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TNSuegHI-1680272868248)(file:///C:/Users/swh/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg)]

第三步清单文件配置:

然后在res文件夹下创建一个xml文件 文件命名为:x5webview_file_paths.xml和provide_file_paths.xml

x5webview_file_paths.xml:

<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path name="sdcard" path="." />
    <external-path name="storage" path="." />
</paths>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CyNoLatw-1680272868249)(file:///C:/Users/swh/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg)]

provide_file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <paths>
        <external-path path="" name="sdcard"/>
    </paths>

</resources>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h3AwmwyN-1680272868250)(file:///C:/Users/swh/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg)]

权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /> <!-- 在SDCard中创建与删除文件权限 -->
<uses-permission
    android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
    tools:ignore="ProtectedPermissions" />

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bhqarHQ5-1680272868251)(file:///C:/Users/swh/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg)]

<service
    android:name="com.tencent.smtt.export.external.DexClassLoaderProviderService"
    android:label="dexopt"
    android:process=":dexopt"></service>
<provider
    android:name="com.tencent.smtt.utils.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/x5webview_file_paths" />
</provider>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g0CauJ7q-1680272868251)(file:///C:/Users/swh/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg)]

功能实现

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


//x5内核初始化接口
        QbSdk.initX5Environment(getApplicationContext(), cb);
QbSdk.setDownloadWithoutWifi(true);
QbSdk.setTbsListener(new TbsListener() {
    @Override
    public void onDownloadFinish(int i) {
        Log.d("xxx", "下载完成 progress = " + i);
    }

    @Override
    public void onInstallFinish(int i) {
        Log.d("xxx", "正在安装内核 progress = " + i);
    }

    @Override
    public void onDownloadProgress(int i) {
        Log.d("xxx", "已经下载 progress = " + i);
    }
});
boolean b = QbSdk.canLoadX5(getApplicationContext());
if(b){
    Log.i("xxx","内核可用"+b);
}
// 在调用TBS初始化、创建WebView之前进行如下配置
HashMap map = new HashMap();
map.put(TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER, true);
map.put(TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE, true);
QbSdk.initTbsSettings(map);
使用X5模块加载
QbSdk.openFileReader(this, url, null,null);
 
 
 
布局引用:
TbsReaderView tbsReaderView = new TbsReaderView(MainActivity.this, new TbsReaderView.ReaderCallback() {
    @Override
    public void onCallBackAction(Integer integer, Object o, Object o1) {

    }
});
LinearLayout layout= findViewById(R.id.rl_tbsView);
  layout.addView(tbsReaderView,new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,RelativeLayout.LayoutParams.MATCH_PARENT));

   String bsReaderTemp = FileUtils.getTBSFileDir(MainActivity.this) + "/TbsReaderTemp";
   File bsReaderTempFile = new File(bsReaderTemp);
   if (!bsReaderTempFile.exists()) {
       Log.e("111111", "准备创建/storage/emulated/0/TbsReaderTemp!!");
       boolean mkdir = bsReaderTempFile.mkdir();
       if (!mkdir) {
           Log.e("111111", "创建/storage/emulated/0/TbsReaderTemp失败!!!!!");
       }
   }
  String extension = url.substring(url.lastIndexOf(".") + 1);
   Log.i("xxx","路径:"+extension);
   String path = FileUtils.getTBSFileDir(getApplicationContext()).getPath() +"/test.doc";
   boolean b= tbsReaderView.preOpen(getFileType(url), false);
//   boolean b = tbsReaderView.preOpen(extension, false);
   if(b){
       Bundle bundle = new Bundle();
       bundle.putString("filePath", url);
       bundle.putString("tempPath", FileUtils.getTBSFileDir(this) + "/" + "TbsReaderTemp");
       tbsReaderView.openFile(bundle);
   }
 
 
 
 
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;
}
 
 
DEMO:

小细节 注意线程问题 解决方案

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        //预览文件
        tbsReaderView.openFile(bundle);
    }
}, 500);

turn str;
}

DEMO:


 

 

小细节  注意线程问题 解决方案

new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//预览文件
tbsReaderView.openFile(bundle);
}
}, 500);


 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值