Android应用内打开.docx/.pdf/.xlsx/.txt等文档-腾讯TBS
1.功能借鉴:https://blog.youkuaiyun.com/xch_yang/article/details/80989631下说明并结合官网集成文档
2.先上传效果图片:
2.在应用的libs中添加sdk:
或是是直接在应用的build.gradle中添加:api 'com.tencent.tbs.tbssdk:sdk:43903'
3.添加so文件:
4.在应用的build.gradle中android下的defaultConfig下添加
ndk {
//设置支持的SO库架构(开发者可以根据需要,选择一个或多个平台的so)
abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86"
}
5.在Application初始化X5内核,注意没有X5内核初始化,文档不会在APP内打开,而是显示第三方的应用选择去打开
//搜集本地TBS内核信息并上报服务器,服务器返回结果决定使用哪个内核。
QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
@Override
public void onViewInitFinished(boolean arg0) {
// TODO Auto-generated method stub
//x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
Log.d("app", " onViewInitFinished is " + arg0);
}
@Override
public void onCoreInitFinished() {
// TODO Auto-generated method stub
}
};
//x5内核初始化接口
QbSdk.initX5Environment(getApplicationContext(), cb);
6.文件下载和查看代码
public class FileDisplayActivity extends Activity implements ReaderCallback, OnClickListener {
private TextView tv_title;
private TbsReaderView mTbsReaderView;
private TextView tv_download;
private RelativeLayout rl_tbsView; //rl_tbsView为装载TbsReaderView的视图
private ProgressBar progressBar_download;
private DownloadManager mDownloadManager;
private long mRequestId;
private DownloadObserver mDownloadObserver;
private String mFileUrl = "", mFileName, fileName;//文件url 由文件url截取的文件名 上个页面传过来用于显示的文件名
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_file_display);
findViewById();
getFileUrlByIntent();
mTbsReaderView = new TbsReaderView(this, this);
rl_tbsView.addView(mTbsReaderView, new RelativeLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT));
if ((mFileUrl == null) || (mFileUrl.length() <= 0)) {
Toast.makeText(FileDisplayActivity.this, "獲取文件url出錯了",
Toast.LENGTH_SHORT).show();
return;
}
mFileName = parseName(mFileUrl);
if (isLocalExist()) {
tv_download.setText("打開文檔");
tv_download.setVisibility(View.GONE);
displayFile();
} else {
if (!mFileUrl.contains("http")) {
new AlertDialog.Builder(FileDisplayActivity.this)
.setTitle("溫馨提示:")