最近需要实现一个功能,在android平台下浏览office系列的文件,最终选择使用腾讯浏览服务。
腾讯浏览服务在使用的时候是需要首先初始化内核的,内核大概有30M,如果你手机有安装wx,qq这类的应用,项目本身是可以共享tbs内核的,但是我是机顶盒设备,正好属于那种没有腾讯生态的环境,所以必须自己提前初始化内核。
有些坑,不过最后实现了,简单总结一下,以备不时之需。腾讯浏览服务官网是有demo的,但是你拿到demo以后可能并不能非常顺畅的去使用,并且官网并没有特别详细的进行描述,导致费了不少的时间,请各位同学看下面的步骤。
首先,如果要使用浏览服务,是需要用到一个jar包的,在app同一目录下创建libs,还会用到一个so库文件,一并加入到项目中去,如下图:
这个时候准备工作就做好了,然后需要在自己的Application中初始化内核接口,因为浏览服务是不提供静态内核的,必须要通过联网的方式下载动态内核,所以需要在应用一起动的时候就去初始化内核,代码如下:
public class DemoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//x5内核初始化接口
QbSdk.initX5Environment(getApplicationContext(), cb);
}
/**
* 搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
*/
QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
@Override
public void onViewInitFinished(boolean isX5Core) {
//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
Log.e("APPAplication", " onViewInitFinished is " + isX5Core);
}
@Override
public void onCoreInitFinished() {
Log.e("APPAplication", " onCoreInitFinished");
}
};
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
}
}
这个application里每次启动初始化方法的时候,onViewInitFinished如果返回true,就是初始化成功,返回false就是初始化失败,刚开始测试的时候,发现一个问题,反复启动,总是出现初始化失败的情况,so我增加了一个activiy,可以提前把内核下载下来,不过这个是腾讯给出的测试demo,不能用于正式项目中去
下一步,就该到加载文件的地方了,其实主要用到的类是TbsReaderView,但是这个类是不可以定义到xml文件中去的,会报错,需要在类中定义,
mTbsReaderView = new TbsReaderView(context, readerCallback);
RelativeLayout rootRl = findViewById(R.id.rl_root);
rootRl.addView(mTbsReaderView, new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));
最后就是打开文件的方法:QbSdk.openFileReader(context, pathName, params, valueCallback),在调用这个方法之前会提前检测一下文件是否支持打开,如果支持打开才会调用该方法
public void openFileReader(Context context, String pathName)
{
HashMap<String, String> params = new HashMap<>();
params.put("local", "true");
JSONObject Object = new JSONObject();
try{
Object.put("pkgName",context.getApplicationContext().getPackageName());
}catch (JSONException e){
e.printStackTrace();
}
params.put("menuData",Object.toString());
QbSdk.getMiniQBVersion(context);
int ret = QbSdk.openFileReader(context, pathName, params, valueCallback);
}
下面是demo的一个地址,可以看着玩,但是如果要加到自己的项目中去,还是需要加混淆文件,否则可能造成打包后无法使用
demo地址:https://github.com/bichao1986/miniqbdemo.git