1.在使用 QbSdk ,还是选择 TbsReaderView
-
使用Qbsdk
int i = QbSdk.openFileReader(context, filePath, null, new ValueCallback<String>() { @Override public void onReceiveValue(String s) { KLog.d("onReceiveValue==" + s); } });
-
使用TbsReaderView
TbsReaderView mTbsReaderView = new TbsReaderView(presenter.exposeActivity(), new TbsReaderView.ReaderCallback() { @Override public void onCallBackAction(Integer integer, Object o, Object o1) { Log.d("lm", "onCallBackAction: " + integer); } }); //注意:为了显示效果,需要添加到content 布局。如果不添加,显示页面会有偏移误差。 ViewGroup viewGroup = presenter.exposeActivity().findViewById(android.R.id.content); viewGroup.addView(mTbsReaderView); //防止布局参数设置失败 mTbsReaderView.post(new Runnable() { @Override public void run() { //添加title FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); layoutParams.topMargin = actionBar高度+状态栏高度 mTbsReaderView.setLayoutParams(layoutParams); } }); //第一个参数:文件类型 boolean bool = mTbsReaderView.preOpen("pdf", false); if (bool) { Bundle bundle = new Bundle(); bundle.putString("filePath", path);//存放pdf 的文件 //存放临时文件的目录。运行后,会在path2的目录下生成.tbs...的文件 bundle.putString("tempPath", path2); mTbsReaderView.openFile(bundle); } //在展示结束的时候,一定要调用。否则一直处于加载状态 mTbsReaderView.onStop();
-
不同点
- Qbsdk: 在第一次加载的时候,会弹出选择应用的弹窗,需要关闭后,在重新打开,才会加载插件。显示的页面还会有别的内容:比如:底部显示目录(需下载QQ浏览器)
- TbsReaderView: 第一次加载直接加载插件。体验更好
-
相同点
都只能查看本地的pdf,所以对于在线的文件,需要先下载到本地。
-
注意
接入了TBS后会去共享使用微信、手Q的x5内核;往往开发人员的测试手机由于不经常使用微信或者调试原因导致微信没有安装x5内核;另外线上剩余2%的用户没有微信内核源的情况TBS也会在wifi条件下自己下载内核(这也是首次加载的时候比较慢的原因)。
2.使用中出现的问题
- 红米手机出现插件加载失败
- 查看so文件是否添加
- ndk { abiFilters }中是否添加"arm64-v8a"。如果有,删除。
具体原因参考添加链接描述 - 查看dependencies 下有没有依赖tbs的jar包。(在别的手机上,即使dependencies下没有,也可以正常运行。这种情况是在第一次加载后,删除掉依赖后,才会出现不依赖也可以正常运行的)