android 7.0 关闭严格模式绕过fileprovider共享文件的限制

Posted 明风的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android 7.0 关闭严格模式绕过fileprovider共享文件的限制相关的知识,希望对你有一定的参考价值。

通过关闭严格模式绕过fileprovider 权限的控制的方法,绕过FileProvider在应用间共享文件的限制
 7.0 开始,android SDK 中的 StrictMode 策略禁止开发人员在应用外部公开 file:// URI。具体表现为,当我们在应用中使用包含 file:// URI 的 Intent 离开自己的应用时,程序会发生故障。(通过以下方式可用绕开)
    private void install(Context context, String filePath) 
        if (TextUtils.isEmpty(filePath)) 
            return;
        
        try 

            File file = new File(filePath);
            Intent intent = new Intent(Intent.ACTION_VIEW);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) 
                StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
                StrictMode.setVmPolicy(builder.build());   // 开启
            

            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//设置标记
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);  // add more permission
            intent.setAction(Intent.ACTION_VIEW);//动作,查看
            intent.setDataAndType(Uri.fromFile(file),
                    "application/vnd.android.package-archive");//设置类型  add more type

             // context.startService(intent);
            //  context.sendBroadcast(intent);
              context.startActivity(intent);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) 
                StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
                builder.detectAll();
                StrictMode.setVmPolicy(builder.build());    // 关闭
            
         catch (Throwable e) 
            e.printStackTrace();
        
    
    
//    11-21 11:55:14.172 32330 32330 W System.err: android.os.FileUriExposedException: file:///storage/emulated/0/app-debug.apk exposed beyond app through Intent.getData()
//            11-21 11:55:14.172 32330 32330 W System.err:     at android.os.StrictMode.onFileUriExposed(StrictMode.java:1978)
//            11-21 11:55:14.173 32330 32330 W System.err:     at android.net.Uri.checkFileUriExposed(Uri.java:2371)
//            11-21 11:55:14.173 32330 32330 W System.err:     at android.content.Intent.prepareToLeaveProcess(Intent.java:10247)
//            11-21 11:55:14.173 32330 32330 W System.err:     at android.content.Intent.prepareToLeaveProcess(Intent.java:10201)
//            11-21 11:55:14.174 32330 32330 W System.err:     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1667)
//
//

以上是关于android 7.0 关闭严格模式绕过fileprovider共享文件的限制的主要内容,如果未能解决你的问题,请参考以下文章

android 7.0变化

在 Angular 中关闭严格模式?

android 7.0低电耗Doze模式

Android 7.0 抓包配置

Android 7.0 抓包配置

屏幕关闭时,前台服务未在 Android 7.0+ 中接收位置更新