2023年11月27日发(作者:)
集成腾讯浏览服务TBS以及遇到的问题
序⾔
腾讯浏览服务功能强⼤,稳定,集成还算是⽐较简单的,⽐原⽣的webview强。最主要的是可以浏览PDF,Word⽂档,⽅便不少。此篇⽂章主要
不是在讲集成,虽然集成的篇幅多些,但是我写的最重要的⽬的是我在实际使⽤过程中碰到的问题,以及解决⽅案。如果已经成功集成的了,可直
接看其他问题,可能会有你想要的。
TBS⽂档接⼊地址
UserStrategy strategy = new UserStrategy(appContext);
shHandleCallback(new andleCallback() {
public Map
int crashType,
String errorType,
String errorMessage,
String errorStack) {
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內核初始化完成的回调,true表x5内核加载成功,否则表加载失败,会⾃动切换到系统内核。
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可⽀持打开⽂件格式:
doc、docx、ppt、pptx、xls、xlsx、pdf、txt、epub
调⽤QQ浏览器可打开:
rar(包含加密格式)、zip(包含加密格式)、tar、bz2、gz、7z(包含加密格式)、doc、docx、ppt、pptx、xls、xlsx、txt、pdf、
epub、chm、html/htm、xml、mht、url、ini、log、bat、php、js、lrc、jpg、jpeg、png、gif、bmp、tiff 、webp、mp3、m4a、aac、amr、wav、ogg、mid、ra、
wma、mpga、ape、flac
接⼝介绍
public static int openFileReader(
Context context,
String filePath,
HashMap
ValueCallback
)
(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) {
//下载结束时的状态,下载成功时errorCode为100,其他均为失败,外部不需要关注具体的失败原因
Log.d("QbSdk", "onDownloadFinish -->下载X5内核完成:" + i);
}
@Override
public void onInstallFinish(int i) {
//安装结束时的状态,安装成功时errorCode为200,其他均为失败,外部不需要关注具体的失败原因
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地址
欢迎订阅我的博客,坚持总是会看到希望的。


发布评论