Android应用内展示office文件--腾讯浏览服务(TBS)
2019-12-03

什么是TBS

 依托 X5 内核强大的能力,致力于提供优化移动端浏览体验的整套解决方案(官网介绍)。我们可利用其做文件浏览功能,支持多种文件格式,完全可以满足需求。更多介绍请看官网:http://x5.tencent.com/

接入TBS

TBS只能浏览本地文件,对于远程文件需要先进行下载,我们先看浏览本地文件如何实现。

1. 下载SDK:http://x5.tencent.com/tbs/sdk.html,将示例中lib下的jar文件 和 jniLibs下的so文件 copy至自己的项目中。 

注: 如果jar包没有加载成功,则File–>Project Structure,点击+号加入jar包  如果so文件是放置于 libs 目录下,需要在 app/build.gradle中指定路径:

android { ... sourceSets { main { jniLibs.srcDirs = ["libs"] } } }

  

2. 使用

  这里主要使用到了TbsReaderView类,并且给Activity实现ReaderCallback接口,并且实现其接口方法(可以不处理,但是需实现)。初始化TbsReaderView需要动态构建,如下:

mTbsReaderView = new TbsReaderView(this, this); //rl_tbsView为装载TbsReaderView的视图 rl_tbsView.addView(mTbsReaderView, new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

 打开本地文件:通过 Bundle 类型参数的形式向 TbsReaderView 对象传递文件地址和另一个临时目录地址。

Bundle bundle = new Bundle(); bundle.putString("filePath", getLocalFile().getPath()); bundle.putString("tempPath", Environment.getExternalStorageDirectory() .getPath()); boolean result = mTbsReaderView.preOpen(parseFormat(mFileName), false); if (result) { mTbsReaderView.openFile(bundle); }

 

3. 添加权限

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/><uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/><uses-permission android:name="android.permission.WRITE_SETTINGS"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/>

 

 

下载远程文件

 利用系统提供的 DownloadManager 类来实现下载,并使用 ContentObserver 类监听下载进度,在其回调方法 onChange() 中可查询下载进度:

private class DownloadObserver extends ContentObserver { @Override public void onChange(boolean selfChange, Uri uri) { //查询下载进度,使用DownloadManager.Query } }

  

效果图

  

注:某些机型可能预览失败, 可能是so文件无法适应64位机型,需在build.gradle下的defaultConfig{}中加入:

ndk { abiFilters "armeabi", "armeabi-v7a", "x86", "mips" }

 

某些机型可能无法下载含有中文路径的文件,可进行转码处理:

/** * 将url进行encode,解决部分手机无法下载含有中文url的文件的问题(如OPPO R9) * * @param url * @return * @author xch */ private String toUtf8String(String url) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < url.length(); i++) { char c = url.charAt(i); if (c >= 0 && c <= 255) { sb.append(c); } else { byte[] b; try { b = String.valueOf(c).getBytes("utf-8"); } catch (Exception ex) { System.out.println(ex); b = new byte[0]; } for (int j = 0; j < b.length; j++) { int k = b[j]; if (k < 0) k += 256; sb.append("%" + Integer.toHexString(k).toUpperCase()); } } } return sb.toString(); }

 

源码已上传至GitHub,需要的可以下载:https://github.com/yangxch/TBSFileBrowsing

转载请注明:https://www.cnblogs.com/xch-yang/p/9361305.html