Android에서 타사 문서 열기(office 시리즈)

7015 단어 도구 레코드
타사 문서 열기(office 시리즈)
1, Microsoft 서비스:
    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 상하를 구분합니다. 구글은 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 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.(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 형식이 추가되었는지 여부입니다.

좋은 웹페이지 즐겨찾기