先上效果
1.导入SDK
tbs_sdk_thirdapp_xxx.jar放到app的libs目录下
2.控件使用
1.先在xml文件创建一个布局用来添加tbs的加载控件
<LinearLayout
android:id="@+id/privacy_linearlayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="15dp"
android:layout_weight="1"
android:background="@drawable/shape_rect_whitesolid_gray_stroke"
android:orientation="vertical"
android:padding="3dp">
</LinearLayout>
2.初始化布局,把tbs的加载控件添加到你创建的LinearLayout布局里
tbsReaderView = new TbsReaderView(...Activity.this, new TbsReaderView.ReaderCallback() {
@Override
public void onCallBackAction(Integer integer, Object o, Object o1) {
Log.e("tbsReaderView", "onCallBackAction: ");
}
});
``````java
privacy_linearlayouts = findViewById(R.id.privacy_linearlayout);
privacy_linearlayouts.addView(tbsReaderView, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
3.然后就是关于你doc文档的一些操作了,最后调用控件去加载,然后在哪里需要展示文档直接调用这个方法就好
private void openDoc(JSONObject jsonObject) {
try {
byte[] FileBase64 = com.csii.newfd.utils.Base64.decode(file);
if (FileBase64.length != 0) {
String filePath = Util.getCacheDir(WordLoadingActivity.this).getAbsolutePath() + "/";
String fileName = "privacypolicy.doc";
File file = new File(filePath);
//首先判断文件夹是否存在
if (!file.exists()) {
if (!file.mkdirs()) { // 文件夹不存在则创建文件
Toast.makeText(WordLoadingActivity.this, "文件夹创建失败", Toast.LENGTH_SHORT).show();
}
} else {
File fileWrite = new File(filePath + File.separator + fileName);
// 首先判断文件是否存在
if (!fileWrite.exists()) {
if (!fileWrite.createNewFile()) { // 文件不存在则创建文件
return; }
} else {
fileWrite.delete();
}
// 实例化对象:文件输出流
FileOutputStream fileOutputStream = new FileOutputStream(fileWrite);
// 写入文件
fileOutputStream.write(FileBase64);
// 清空输出流缓存
fileOutputStream.flush();
// 关闭输出流
fileOutputStream.close();
}
Bundle bundle_doc = new Bundle();
bundle_doc.putString("filePath", filePath + fileName);
bundle_doc.putString("tempPath", filePath);
if (!APPConfig.isQbSdkinit) {
QbSdk.setDownloadWithoutWifi(true);//流量情况下也可以下载x5内核;
//搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
boolean needDownload = TbsDownloader.needDownload(this, TbsDownloader.DOWNLOAD_OVERSEA_TBS);
QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
@Override
public void onViewInitFinished(boolean arg0) {
// TODO Auto-generated method stub
//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
Log.e("openDoc", "openDoc: " + "finish");
if (arg0) {
APPConfig.isQbSdkinit = true;
boolean isReady = false;
try {
isReady = tbsReaderView.preOpen("DOC", false);
} catch (Exception e) {
e.printStackTrace();
}
Log.e("isReady", "initView:isReady== " + isReady);
if (isReady) {
dialog.cancel();
tbsReaderView.openFile(bundle_doc);
}
}else {
TbsDownloader.startDownload(...Activit.this);}
if (dialog != null && dialog.isShowing()) {
dialog.cancel();
}
}
@Override
public void onCoreInitFinished() {
// TODO Auto-generated method stub
Log.e("openDoc", "onCoreInitFinished: ");
}
};
Log.i("openDoc", "openDoc: " + "start");
//x5内核初始化接口
try {
QbSdk.initX5Environment(getApplicationContext(), cb);
} catch (Exception e) {
e.printStackTrace();
}
try {
QbSdk.setTbsListener(new TbsListener() {
@Override
public void onDownloadFinish(int i) {
if (i!=100&&!APPConfig.isQbSdkinit){
TbsDownloader.startDownload(...Activity.this);
Log.i("num", "onDownloadFinish: "+i); }
}
@Override
public void onInstallFinish(int i) {
}
@Override
public void onDownloadProgress(int i) {
}
});
} catch (Exception e) {
e.printStackTrace();
}
} else {
boolean isReady = tbsReaderView.preOpen("DOC", false);
Log.e("isReady", "initView:isReady== " + isReady);
if (isReady) {
dialog.cancel();
tbsReaderView.openFile(bundle_doc);
}
if (dialog != null && dialog.isShowing()) {
dialog.cancel();
}
}
} else {
if (dialog != null && dialog.isShowing()) {
dialog.cancel();
}
}
} catch (Exception e) {
e.printStackTrace();
if (dialog != null && dialog.isShowing()) {
dialog.cancel();
}
}
}
3.注意避坑
1.当前页面销毁的时候记得调用控件的停止加载方法,不然它就会一直加载,导致找不到Context空指针崩溃
try {
QbSdk.initX5Environment(getApplicationContext(), cb);
} catch (Exception e) {
e.printStackTrace();
}
@Override
protected void onDestroy() {
super.onDestroy();
tbsReaderView.onStop();
TbsDownloader.stopDownload();
}
2.有时候不知道因为什么会加载失败,导致页面白屏。需要加一个监听,代码上面有,这块就不贴了哈
这就差不多完事儿了,剩下如果有啥小毛病欢迎大家指正。