Android打开第三方文档(office系列)

打开第三方文档(office系列)

1,微软服务:
    https://view.officeapps.live.com/op/view.aspx?src=(文档的阿里云路径)

直接 贴代码

测试手机WebView 打不开路径,试了好一会,没出来,也可能是我的设置问题,浏览器正常打开

 WebSettings webSettings = mWebView.getSettings();
//       //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
        webSettings.setJavaScriptEnabled(true);
        mWebView.getSettings().setBlockNetworkImage(false);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            mWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        }
        webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
        webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
        //缩放操作
        webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
        webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
        webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
        //其他细节操作
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
        webSettings.setAllowFileAccess(true); //设置可以访问文件
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式


        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                LogUtil.i(TAG, "onPageFinished: finish");
            }
        });
        mWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                LogUtil.i(TAG, "onProgressChanged: " + newProgress);
                if (newProgress == 100) {
                    //todo    可以在这里关闭弹窗
                }
            }
        });
2. 本地启动第三方软件,正常来说都是启动WPS。

这里区分7.0上下的,google在7.0更新了URI的机制,得配置FileProvider,
详细解说

为了兼容

 Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        //设置intent的Action属性
        intent.setAction(Intent.ACTION_VIEW);
        //获取文件file的MIME类型
        String type = getMIMEType(file);
        //设置intent的data和Type属性。
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            Uri data;
            // 清单文件中配置的authorities
            data = FileProvider.getUriForFile(context, getPackageName()+".fileprovider", file);
            // 给目标应用一个临时授权
            intent.setDataAndType(data, type);
            List<ResolveInfo> resInfoList = context.getPackageManager()
                    .queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
            for (ResolveInfo resolveInfo : resInfoList) {
                String packageName = resolveInfo.activityInfo.packageName;
                context.grantUriPermission(packageName, data, Intent.FLAG_GRANT_READ_URI_PERMISSION
                        | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            }
        } else {
            intent.setDataAndType(Uri.fromFile(file), type);
        }

        try {
            context.startActivity(intent);
        } catch (Exception e) {
            e.printStackTrace();
            LogUtil.v(TAG, "openFile:Exception " + e.toString());
            ToastUitls.showShort("没有找到合适的软件打开");
        }

3,还有遇到的问题是假如(我的8.0三星)手机上没有合适的软件,或者选取了一个不合适的软件,那一直会报错没反应,我的手机上只有这个UC,但是启动会失败,应该是UC 不支持这个Activity外部调起(猜测)
 Process: com.UCMobile:fileService, PID: 27528
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.UCMobile/com.uc.browser.office.OfficeActivity}: java.lang.SecurityException: Package com.uc.browser.office does not belong to 10117
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2961)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3039)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1652)
        at com.uc.base.aerie.ai$b.handleMessage(ProGuard:775)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6746)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:108)
     Caused by: java.lang.SecurityException: Package com.uc.browser.office does not belong to 10117
        at android.os.Parcel.readException(Parcel.java:2005)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183)
        at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
        at android.content.ContentProviderProxy.call(ContentProviderNative.java:651)
        at android.provider.Settings$NameValueCache.getStringForUser(Settings.java:1925)
        at android.provider.Settings$Global.getStringForUser(Settings.java:10603)
        at android.provider.Settings$Global.getString(Settings.java:10592)
        at android.provider.Settings$Global.getInt(Settings.java:10771)
        at com.android.internal.policy.PhoneWindow.<init>(PhoneWindow.java:329)
        at android.app.Activity.attach(Activity.java:6961)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2894)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3039) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1652) 
        at com.uc.base.aerie.ai$b.handleMessage(ProGuard:775) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6746) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 
        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:108) 
4,坑

我还遇到的问题是MIME类型没写全,坑死了,检查 .docx .pptx格式是否有添加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值