1.官网下载所需SDK 腾讯TBS服务官网介绍 下载第一个就行
2.导入jar包
3.设置ndk支持
x5暂时不提供64位so文件,为了保证64位手机能正常加载x5内核,进行以下两项设置:
打开对应module中的build.gradle文件,在文件的android{}中的defaultConfig{}里(如果没有defaultConfig{}则手动添加)添加如下配置: ndk{abiFilters “armeabi”}
4.导入so文件 在下载的sdk里面有
5.添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/>
<uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
6.主函数
public class MainActivity extends AppCompatActivity implements TbsReaderView.ReaderCallback {
RelativeLayout mRelativeLayout;
private TbsReaderView mTbsReaderView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化Tbs
mTbsReaderView = new TbsReaderView(this, this);
//实例化显示页面
mRelativeLayout = findViewById(R.id.tbsView);
//向布局里添加Tbs
mRelativeLayout.addView(mTbsReaderView,new RelativeLayout.LayoutParams(-1,-1));
init();
}
private void init() {
QbSdk.initX5Environment(getApplicationContext(), new QbSdk.PreInitCallback() {
@Override
public void onCoreInitFinished() {
}
@Override
public void onViewInitFinished(boolean b) {
Log.d("aaaaaa", "内核加载成功: "+b);
//第一个参数是文件完整的地址 第二个参数是文件名
displayFile(Environment.getExternalStorageDirectory()+"/wsnd.doc","wsnd.doc");
}
});
}
//因为用的是腾讯的插件 必须要有腾讯的文件夹可以这么理解 所以手机里必须要有这个文件夹 没有要创建 这是创建文件夹的地址
private String tbsReaderTemp = Environment.getExternalStorageDirectory() + "/TbsReaderTemp";
private void displayFile(String filePath, String fileName) {
//增加下面一句解决没有TbsReaderTemp文件夹存在导致加载文件失败
String bsReaderTemp = tbsReaderTemp;
//这里就是判断有就不创建 没有就创建这个文件夹
File bsReaderTempFile = new File(bsReaderTemp);
if (!bsReaderTempFile.exists()) {
Log.d("print", "准备创建/TbsReaderTemp!!");
boolean mkdir = bsReaderTempFile.mkdir();
if (!mkdir) {
Log.d("print", "创建/TbsReaderTemp失败!!!!!");
}
}
Bundle bundle = new Bundle();
/* 1.TbsReader: Set reader view exception:Cannot add a null child view to a ViewGroup
TbsReaderView: OpenFile failed! [可能是文件的路径错误]*/
/* 2.插件加载失败
so文件不支持;*/
/*
ndk {
//设置支持的SO库架构 'arm64-v8a',
abiFilters 'armeabi', "armeabi-v7a", 'x86'
} */
/*
3.自适应大小
*/
//打印路径
Log.d("print", "displayFile: "+fileName);
Log.d("print", "filePath" + filePath);
Log.d("print", "tempPath" + tbsReaderTemp);
bundle.putString("filePath", filePath);//添加需要读取文件的路径 上面已经预备好了
bundle.putString("tempPath", tbsReaderTemp);//添加创建需要的文件夹 上面已经预备好了
//第一个参数是放读取文件的类型 比如word文档是doc dpf ppt 当然我们这里只需要传入文件名会调用这个方法自动识别上面类型 第二个参数不用管
boolean result = mTbsReaderView.preOpen(getFileType(fileName), false);
Log.d("print", "查看文档---" + result);
if (result) {
//开始执行Tbs
mTbsReaderView.openFile(bundle);
} else {
}
}
private String getFileType(String paramString) {
String str = "";
if (TextUtils.isEmpty(paramString)) {
Log.d("print", "paramString---->null");
return str;
}
Log.d("print", "paramString:" + paramString);
int i = paramString.lastIndexOf('.');
if (i <= -1) {
Log.d("print", "i <= -1");
return str;
}
str = paramString.substring(i + 1);
Log.d("print", "paramString.substring(i + 1)------>" + str);
return str;
}
@Override
public void onCallBackAction(Integer integer, Object o, Object o1) {
}
//最后别忘记停止
@Override
protected void onDestroy() {
super.onDestroy();
mTbsReaderView.onStop();
}
}
7.布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/tbsView"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</RelativeLayout>
</LinearLayout>
8.附上根底 /storage/emulated/0/wsnd.doc 这个地方必须要有对于的文件 我上面写的是wsnd.doc 这个路径必须要有这个文件
9.视频的话 直接在这个基础上添加以下代码
public class MainActivity extends AppCompatActivity {
private String url="http://125.39.7.21/omts.tc.qq.com/ASRf20vDz9rC-GgewlopFVFfH51dcbp7809uWikpvLJc/uwMRJfz-r5jAYaQXGdGnC2_ppdhgmrDlPaRvaV7F2Ic/mTx_vaPrR9xrCW7i2ItnryZYiYP-JZAEu8DfwYfqCILWm96XkoDuX5WdHoqlHgx8snRQ_T-7oVpLpf6M-8A8agYyESaerGYN5i0vlfZiWGrBQeHDNq9KHYHOwPc30DwN3gPObAEpujxx2WwcW_uVSvKkPUaW_U7g/024_x06720yhekx.321002.1.ts?index=24&start=287760&end=293589&brs=23206908&bre=23573695&ver=4";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initvidio();
}
private void initvidio() {
QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
@Override
public void onViewInitFinished(boolean b) {
//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
Log.d("app", " onViewInitFinished is " + b);
startPlay(url);
}
@Override
public void onCoreInitFinished() {
// TODO Auto-generated method stub
}
};
//x5内核初始化接口
QbSdk.initX5Environment(getApplicationContext(), cb);
}
/**
* 直接调用播放视频
* @param videoUrl 视频地址
*/
private void startPlay(String videoUrl){
//判断当前是否可用
if(TbsVideo.canUseTbsPlayer(getApplicationContext())){
//播放视频
TbsVideo.openVideo(getApplicationContext(), videoUrl);
}
}
}