腾讯浏览服务官网
https://x5.tencent.com/tbs/index.html
配置:下载sdk,并导入jar文件和so文件


android {
...
defaultConfig {
...
// 这里比较坑,当时用极光推送把64位的ndk库也加上了,x5内核初始化一直失败
// 这里要去掉所有64位库,x5内核才能加载成功
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
}
}
}
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
Application进行初始化
//初始化X5内核
QbSdk.initX5Environment(this, new QbSdk.PreInitCallback() {
@Override
public void onCoreInitFinished() {
//x5内核初始化完成回调接口,此接口回调并表示已经加载起来了x5,有可能特殊情况下x5内核加载失败,切换到系统内核。
Log.e("@@","加载内核是否onCoreInitFinished成功:");
}
@Override
public void onViewInitFinished(boolean b) {
//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
Log.e("@@","加载内核是否成功:"+b);
}
});
如何使用
主要用到这个类TbsReaderView
来打开文件,这个View必须用代码动态创建
。
private void openFile(String path) {
//通过bundle把文件传给x5,打开的事情交由x5处理
Bundle bundle = new Bundle();
//传递文件路径
bundle.putString("filePath", path);
//临时的路径
bundle.putString("tempPath", Environment.getExternalStorageDirectory() + File.separator + "temp");
TbsReaderView readerView = new TbsReaderView(this, new TbsReaderView.ReaderCallback() {
@Override
public void onCallBackAction(Integer integer, Object o, Object o1) {
}
});
//加载文件前的初始化工作,加载支持不同格式的插件
boolean b = readerView.preOpen(getFileType(path), false);
if (b) {
readerView.openFile(bundle);
}
// 往容器里添加TbsReaderView控件
frameLayout.addView(readerView);
}
/***
* 获取文件类型
*
* @param path 文件路径
* @return 文件的格式
*/
private String getFileType(String path) {
String str = "";
if (TextUtils.isEmpty(path)) {
return str;
}
int i = path.lastIndexOf('.');
if (i <= -1) {
return str;
}
str = path.substring(i + 1);
return str;
}
@Override
protected void onDestroy() {
super.onDestroy();
// 一定要调用此方法,才能选择下一个文件预览
// 否则显示loading而不展示
// 适当的位置调用此方法
readerView.onStop();
}
可通过getX5WebViewExtension()方法判断当前设备是否支持x5内核
import com.tencent.smtt.sdk.WebView;
public class X5WebView extends WebView {
public X5WebView(Context context) {
super(context);
}
}
不为null则支持x5内核
new X5WebView(this).getX5WebViewExtension() != null
网友评论