2023年11月27日发(作者:)

集成腾讯浏览服务TBS以及遇到的问题

序⾔

腾讯浏览服务功能强⼤,稳定,集成还算是⽐较简单的,⽐原⽣的webview强。最主要的是可以浏览PDF,Word⽂档,⽅便不少。此篇⽂章主要

不是在讲集成,虽然集成的篇幅多些,但是我写的最重要的⽬的是我在实际使⽤过程中碰到的问题,以及解决⽅案。如果已经成功集成的了,可直

接看其他问题,可能会有你想要的。

TBS⽂档接⼊地址

UserStrategy strategy = new UserStrategy(appContext);

shHandleCallback(new andleCallback() {

public Map onCrashHandleStart(

int crashType,

String errorType,

String errorMessage,

String errorStack) {

LinkedHashMap map = new LinkedHashMap();

String x5CrashInfo = shExtraMessage(appContext);

("x5crashInfo", x5CrashInfo);

return map;

}

@Override

public byte[] onCrashHandleStart2GetExtraDatas(

nloadWithoutWifi(true);

Listener(

new TbsListener() {

@Override

public void onDownloadFinish(int i) {

Log.d("QbSdk", "onDownloadFinish -->下载X5内核完成:" + i);

}

@Override

public void onInstallFinish(int i) {

Log.d("QbSdk", "onInstallFinish -->安装X5内核进度:" + i);

}

@Override

public void onDownloadProgress(int i) {

Log.d("QbSdk", "onDownloadProgress -->下载X5内核进度:" + i);

}

});

tCallback cb =

new tCallback() {

@Override

public void onViewInitFinished(boolean arg0) {

// x5內核初始化完成的回调,truex5内核加载成功,否则表加载失败,会⾃动切换到系统内核。

Log.d("QbSdk", " 内核加载 " + arg0);

}

private void openFile() {

String extensionName = eType( h() );

Bundle bundle = new Bundle();

ing( _FILE_PATH, h() );

ing( _TEMP_PATH, CachePath( mActivity ) );

boolean result = n( extensionName, false );

MLog.i( "addTbsReaderView: " + result );

if ( result ) {

le( bundle );

}

}

在onPause的时候再调⽤。

if ( mTbsReaderView != null ) {

();

}

使⽤TBS的openFileReader打开⽂件

⽀持格式

TBS已提供9种主流⽂件格式的本地打开,如果您需要使⽤更⾼级的能⼒请使⽤QQ浏览器打开⽂件

接⼊TBS可⽀持打开⽂件格式:

docdocxpptpptxxlsxlsxpdftxtepub

调⽤QQ浏览器可打开:

rar(包含加密格式)、zip(包含加密格式)、tarbz2gz7z(包含加密格式)、docdocxpptpptxxlsxlsxtxtpdf

epubchmhtml/htmxmlmhturlinilogbatphpjslrcjpgjpegpnggifbmptiff webpmp3m4aaacamrwavoggmidra

wmampgaapeflac

接⼝介绍

public static int openFileReader(

Context context,

String filePath,

HashMap extraParams,

ValueCallback callback

)

(1)此⽅法在类下

Qbsdk

(2)调⽤之后,优先调起 QQ 浏览器打开⽂件。如果没有安装 QQ 浏览器,在 X5 内核下调起简版 QB 打开⽂ 件。如果使⽤的系统内核,则调

起⽂件阅读器弹框。

(3)暂时只⽀持本地⽂件打开

contextminiqbActivitycontextactivitycontextApplicationfilePath

: 调起 。此参数只能是 类型的 ,不能设置为 的 context。 : ⽂件路

径。格式为 本地存储路径格式,例如:. 不⽀持 格式。暂不⽀持在线⽂件。 : 的扩展

android/sdcard/Download/file:///extraParamsminiqb

功能。为⾮必填项,若⽆需特殊配置,。扩展功能参考“⽂件功能定制” : 提供 打开/关闭时给调⽤⽅回调通

默认可传⼊nullValueCallbackminiqb

知,以便应⽤层做相应处理,您可以在出现以下回调时结束您的进程,节约内存占⽤。主要回调值如下:

filepath error

TbsReaderDialogClosed

default browser

fileReaderClosed

返回值:

1: QQ 浏览器打开

2: MiniQB 打开

3:调起阅读器弹框

-1:filePath 为空 打开失败

public static void closeFileReader(Context context)

主动关闭⽂件打开ui,并清理相应内存占⽤。

久的⽂档都没有找到,后⾯在⽹上搜索,给出了以下的代码,

android:name="ovider"

android:authorities="包名.fileprovider"

android:exported="false"

android:grantUriPermissions="true">

android:name="_PROVIDER_PATHS"

android:resource="@xml/xml⽂件名" />

这错就错在android:authorities="包名.fileprovider",因为后来我去调⽤服务开启的QbSdk的类中,看这个错误发⽣的时机,发现他们是通过类

型+“.provider”来校验的,所以只要改成android:authorities="包名.provider"就可以了,这个错误调试了很久,还是得在源码中才能发现春

天。

其他问题

使⽤TbsReaderView浏览⽂件夜间模式问题

我在使⽤⼩⽶10⾄尊版的时候,我的APP中没有适配深⿊模式,使⽤的主题是onBar,但是⼩⽶10还是强制

性的把我的APP使⽤了深⿊模式。并且我发现,不⽌是我的APP,⽽是我⼿机上所有的APP都是如此,不管有没有适配,都使⽤了深⿊模式,也

就是夜间模式。这就导致了⼀个问题,使⽤TbsReaderView来浏览⽂件的时候,背景是⿊⾊的,字体的颜⾊也是有点⿊,导致⽂档看的不清楚,

Listener(

new TbsListener() {

@Override

public void onDownloadFinish(int i) {

//下载结束时的状态,下载成功时errorCode100,其他均为失败,外部不需要关注具体的失败原因

Log.d("QbSdk", "onDownloadFinish -->下载X5内核完成:" + i);

}

@Override

public void onInstallFinish(int i) {

//安装结束时的状态,安装成功时errorCode200,其他均为失败,外部不需要关注具体的失败原因

Log.d("QbSdk", "onInstallFinish -->安装X5内核进度:" + i);

}

@Override

public void onDownloadProgress(int i) {

//下载过程的通知,提供当前下载进度[0-100]

Log.d("QbSdk", "onDownloadProgress -->下载X5内核进度:" + i);

}

});

上⾯是下载的监听,但是在实际中我经常发现onDownloadFinish返回是110,或者120等。官⽹上注明只有100是成功。只要不是100,则X5

内核加载肯定是失败的。但是官⽹⼜没有说如何解决。没办法只能⾃⼰找出路。在⼗分艰难阅读了⼤部分带有混淆的TBS的jar包后,连猜带蒙的

我找到了ownload(this);这个⽅法。可以实现重新下载,但是如果只是重新下载了还是不⼀定能保证x5的加载是⼀定成

功的。所以我⼜找到了(this);这个⽅法。可以重置x5的配置。kill掉APP后就会重新下载跟初始化。在实际线上的使⽤情况是⼗分复

杂的,有的⼈还没等下载结束就把APPkill掉了,导致下载没完成,或者是下载完成加载没完成,所以只是使⽤

ownload(this);重新下载的话要结合Listener⾥的回调,还有tCallback的回调来综合判

断。

tCallback cb =

# ------------------ Keep LineNumbers and properties ---------------- #

public ;

}

-keep public class k.* {

public protected *;

}

-keep public class eBooter {

public ;

public ;

}

-keep public class eBaseActivity {

public protected *;

}

-keep public class eBaseActivityProxy {

public protected *;

}

-keep class **JNI* {*;}

集成Demo地址

欢迎订阅我的博客,坚持总是会看到希望的。