美文网首页
Android打开7.0软件

Android打开7.0软件

作者: 梦乾tool | 来源:发表于2017-12-27 17:11 被阅读0次

    在Android7.0之前打开第三方文件是很简单的事情,(如下方这样可直接打开),但是Android 7.0之后我们会发现程序会直接闪退

    报错

    android.os.FileUriExposedException:

    file:///storage/emulated/0/updata.apk exposed beyond app through Intent.getData()

    然后经过网上一番查找,就会查到FileProvider的相关解决方案,什么修改manifest、provider什么之类的,然后我们越踩越深,到头来什么问题都没有解决,无奈只好自己亲手持刀操作了

    解决方案

    此方法适合用FileProvider仍没有解决的同胞们,亦或者直接用此方法:比较流氓的方法,绕过7.0的文件权限检查

    这里以打开text文本为例

    try {

          Uri uri = null;

          if (Build.VERSION.SDK_INT >= 24) {

              StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();

              StrictMode.setVmPolicy(builder.build());

              uri = Uri.fromFile(file1);

          } else {

              uri = Uri.fromFile(file1);

            }

              Intent intent = new Intent(Intent.ACTION_VIEW);

              intent.addCategory(Intent.CATEGORY_DEFAULT);

              intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

              intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

              intent.setDataAndType(uri, "text/plain");

              startActivity(intent);

            } catch (Exception e) {

              e.printStackTrace();

          }

    6.0之前打开文件方式

    public class MyIntent { 

        //android获取一个用于打开HTML文件的intent 

        public static Intent getHtmlFileIntent( String param ) { 

            Uri uri = Uri.parse(param ).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(param ).build(); 

            Intent intent = new Intent("android.intent.action.VIEW"); 

            intent.setDataAndType(uri, "text/html"); 

            return intent; 

        } 

        //android获取一个用于打开图片文件的intent 

        public static Intent getImageFileIntent( String param ) { 

            Intent intent = new Intent("android.intent.action.VIEW"); 

            intent.addCategory("android.intent.category.DEFAULT"); 

            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

            Uri uri = Uri.fromFile(new File(param )); 

            intent.setDataAndType(uri, "image/*"); 

            return intent; 

        } 

        //android获取一个用于打开PDF文件的intent 

        public static Intent getPdfFileIntent( String param ) { 

            Intent intent = new Intent("android.intent.action.VIEW"); 

            intent.addCategory("android.intent.category.DEFAULT"); 

            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

            Uri uri = Uri.fromFile(new File(param )); 

            intent.setDataAndType(uri, "application/pdf"); 

            return intent; 

        } 

        //android获取一个用于打开文本文件的intent 

        public static Intent getTextFileIntent( String param, boolean paramBoolean) { 

            Intent intent = new Intent("android.intent.action.VIEW"); 

            intent.addCategory("android.intent.category.DEFAULT"); 

            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

            if (paramBoolean) { 

                Uri uri1 = Uri.parse(param ); 

                intent.setDataAndType(uri1, "text/plain"); 

            } else { 

                Uri uri2 = Uri.fromFile(new File(param )); 

                intent.setDataAndType(uri2, "text/plain"); 

            } 

            return intent; 

        } 

        //android获取一个用于打开音频文件的intent 

        public static Intent getAudioFileIntent( String param ) { 

            Intent intent = new Intent("android.intent.action.VIEW"); 

            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

            intent.putExtra("oneshot", 0); 

            intent.putExtra("configchange", 0); 

            Uri uri = Uri.fromFile(new File(param )); 

            intent.setDataAndType(uri, "audio/*"); 

            return intent; 

        } 

        //android获取一个用于打开视频文件的intent 

        public static Intent getVideoFileIntent( String param ) { 

            Intent intent = new Intent("android.intent.action.VIEW"); 

            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

            intent.putExtra("oneshot", 0); 

            intent.putExtra("configchange", 0); 

            Uri uri = Uri.fromFile(new File(param )); 

            intent.setDataAndType(uri, "video/*"); 

            return intent; 

        } 

     

        //android获取一个用于打开CHM文件的intent 

        public static Intent getChmFileIntent( String param ) { 

            Intent intent = new Intent("android.intent.action.VIEW"); 

            intent.addCategory("android.intent.category.DEFAULT"); 

            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

            Uri uri = Uri.fromFile(new File(param )); 

            intent.setDataAndType(uri, "application/x-chm"); 

            return intent; 

        } 

     

        //android获取一个用于打开Word文件的intent 

        public static Intent getWordFileIntent( String param ) { 

            Intent intent = new Intent("android.intent.action.VIEW"); 

            intent.addCategory("android.intent.category.DEFAULT"); 

            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

            Uri uri = Uri.fromFile(new File(param )); 

            intent.setDataAndType(uri, "application/msword"); 

            return intent; 

        } 

        //android获取一个用于打开Excel文件的intent 

        public static Intent getExcelFileIntent( String param ) { 

            Intent intent = new Intent("android.intent.action.VIEW"); 

            intent.addCategory("android.intent.category.DEFAULT"); 

            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

            Uri uri = Uri.fromFile(new File(param )); 

            intent.setDataAndType(uri, "application/vnd.ms-excel"); 

            return intent; 

        } 

        //android获取一个用于打开PPT文件的intent 

        public static Intent getPptFileIntent( String param ) { 

            Intent intent = new Intent("android.intent.action.VIEW"); 

            intent.addCategory("android.intent.category.DEFAULT"); 

            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

            Uri uri = Uri.fromFile(new File(param )); 

            intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); 

            return intent; 

        } 

    }

    作者:梦乾

    來源:简书

    相关文章

      网友评论

          本文标题:Android打开7.0软件

          本文链接:https://www.haomeiwen.com/subject/szgugxtx.html