Android 基于x5Webview 浏览文件 office文档

此功能基于腾讯TBS 的X5Webview 实现

先上图

 

第一步:下载jar包添加到项目

 下载地址 腾讯浏览服务-SDK下载 (tencent.com) 集成看下官方文档

开发时候 测试机Android11 需要先申请11 特殊权限

我在MainActivity里申请的Android 11 文件权限

  public void checkPermissions() {
        //申请Android11特殊权限
        requestManagerPermission();
    }

    private void requestManagerPermission() {
        //当系统在11及以上
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            // 没文件管理权限时申请权限
            if (!Environment.isExternalStorageManager()) {
                Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
                intent.setData(Uri.parse("package:" + getPackageName()));
                startActivityForResult(intent, 100);
            }else {
                Intent intent = new Intent(this,WebActivity.class);
                startActivity(intent);
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 100 && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            //用户拒绝权限,重新申请
            if (!Environment.isExternalStorageManager()) {
                requestManagerPermission();
            }
        }
    }

创建WebActivity  实现文件下载到sd卡  并且以来x5Webview进行浏览


    private void downloadFile(final String url, final String path) {
        RequestParams requestParams = new RequestParams(url);
        requestParams.setSaveFilePath(path);
        // 下载完成后自动为文件命名
        requestParams.setAutoRename(true);
        x.http().get(requestParams, new Callback.CacheCallback<File>() {
            @Override
            public boolean onCache(File result) {
                return false;
            }

            @Override
            public void onSuccess(File result) {
                Log.d("success", "下载成功" + path);
                // 下载成功后加载文件
                displayFile(BASE_PATH, docName);
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                Log.e("success", "下载失败" + ex.getMessage().toString());
                Toast.makeText(WebActivity.this, "文件下载失败", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onCancelled(CancelledException cex) {

            }
            @Override
            public void onFinished() {

            }
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mTbsReaderView.onStop();
    }
   

    @Override
    public void onCallBackAction(Integer integer, Object o, Object o1) {
        Log.d("call", "==================+++++====-=-=++" + integer);
    }
    private void displayFile(String filePath, String fileName) {
        //增加下面一句解决没有TbsReaderTemp文件夹存在导致加载文件失败
        String bsReaderTemp =BASE_PATH;
        File bsReaderTempFile = new File(bsReaderTemp);
        if (!bsReaderTempFile.exists()) {
            Log.e("print", "准备创建/TbsReaderTemp!!");
            boolean mkdir = bsReaderTempFile.mkdir();
            if (!mkdir) {
                Log.e("print", "创建/TbsReaderTemp失败!!!!!");
            }
        }
        Bundle bundle = new Bundle();
        bundle.putString("filePath", filePath);
        bundle.putString("tempPath", BASE_PATH);
        boolean result = mTbsReaderView.preOpen(getFileType(filePath.toString()), false);
        Log.e("print", "查看文档---" + result);
        if (result) {
            mTbsReaderView.openFile(bundle);
        } else {
        }
    }

    /**
     * 后缀名的判断
     *
     * @param paramString
     * @return
     */
    private String getFileType(String paramString) {
        String str = "";

        if (TextUtils.isEmpty(paramString)) {
            Log.e("print", "paramString---->null");
            return str;
        }
        Log.e("print", "paramString:" + paramString);
        int i = paramString.lastIndexOf('.');
        if (i <= -1) {
            Log.e("print", "i <= -1");
            return str;
        }
        str = paramString.substring(i + 1);
        Log.e("print", "paramString.substring(i + 1)------>" + str);
        return str;
    }

xml文件 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <RelativeLayout
        android:id="@+id/tbsView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/teal_200"
        />

</LinearLayout>

下载地址 demo   写于2022-3-23   联系作者 352679497@qq.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值