Android应用内展现office文件--腾讯浏览服务(TBS)

什么是TBShtml

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

接入TBSandroid

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

1. 下载SDKhttp://x5.tencent.com/tbs/sdk.html,将示例中lib下的jar文件 和 jniLibs下的so文件 copy至本身的项目中。 github


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

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

  

2. 使用

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

 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 对象传递文件地址和另外一个临时目录地址。gradle

 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"/>

 

 

下载远程文件ui

 利用系统提供的 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

转载请注明:http://www.javashuo.com/article/p-bvuwlrxf-ed.html 

 

 

 


 

  更多技术干货,欢迎关注个人公众号:ChaoYoung

相关文章
相关标签/搜索