Android开发打开文件的Intent及使用

来源:互联网 发布:弯曲正应力电测数据 编辑:程序博客网 时间:2024/05/17 09:46

在写文件管理系统时会用到各种打开不同格式的文件的需求,由于Android系统默认内置了一些可以打开的系统应用,但还是不能满足需求,比如打开视频文 件、word等,需要安装相应的播放软件才可以使用,这时程序会通过Intent查找可以使用的软件实现通过代码打开一个文件需要2部分,一部分是要获取 到不同文件的后缀,以便根据需求匹配相应的Intent,另一个就是不同格式的文件打开的Intent不同1、在values目录下定义后缀数组文件 fileendings

View Code
  1     <?xml version="1.0" encoding="utf-8"?>  2     <resources>  3     <array name="fileEndingImage">  4     <item>.png</item>  5     <item>.gif</item>  6     <item>.jpg</item>  7     <item>.jpeg</item>  8     <item>.bmp</item>  9     </array> 10     <array name="fileEndingAudio"> 11     <item>.mp3</item> 12     <item>.wav</item> 13     <item>.ogg</item> 14     <item>.midi</item> 15     </array> 16     <array name="fileEndingVideo"> 17     <item>.mp4</item> 18     <item>.rmvb</item> 19     <item>.avi</item> 20     <item>.flv</item> 21     </array> 22     <array name="fileEndingPackage"> 23     <item>.jar</item> 24     <item>.zip</item> 25     <item>.rar</item> 26     <item>.gz</item> 27     <item>.apk</item> 28     <item>.img</item> 29     </array> 30     <array name="fileEndingWebText"> 31     <item>.htm</item> 32     <item>.html</item> 33     <item>.php</item> 34     <item>.jsp</item> 35     </array> 36     <array name="fileEndingText"> 37     <item>.txt</item> 38     <item>.java</item> 39     <item>.c</item> 40     <item>.cpp</item> 41     <item>.py</item> 42     <item>.xml</item> 43     <item>.json</item> 44     <item>.log</item> 45     </array> 46     <array name="fileEndingWord"> 47     <item>.doc</item> 48     <item>.docx</item> 49     </array> 50     <array name="fileEndingExcel"> 51     <item>.xls</item> 52     <item>.xlsx</item> 53     </array> 54     <array name="fileEndingPPT"> 55     <item>.ppt</item> 56     <item>.pptx</item> 57     </array> 58       59     <array name="fileEndingPdf"> 60     <item>.p<?xml version="1.0" encoding="utf-8"?> 61     <resources> 62     <array name="fileEndingImage"> 63     <item>.png</item> 64     <item>.gif</item> 65     <item>.jpg</item> 66     <item>.jpeg</item> 67     <item>.bmp</item> 68     </array> 69     <array name="fileEndingAudio"> 70     <item>.mp3</item> 71     <item>.wav</item> 72     <item>.ogg</item> 73     <item>.midi</item> 74     </array> 75     <array name="fileEndingVideo"> 76     <item>.mp4</item> 77     <item>.rmvb</item> 78     <item>.avi</item> 79     <item>.flv</item> 80     </array> 81     <array name="fileEndingPackage"> 82     <item>.jar</item> 83     <item>.zip</item> 84     <item>.rar</item> 85     <item>.gz</item> 86     <item>.apk</item> 87     <item>.img</item> 88     </array> 89     <array name="fileEndingWebText"> 90     <item>.htm</item> 91     <item>.html</item> 92     <item>.php</item> 93     <item>.jsp</item> 94     </array> 95     <array name="fileEndingText"> 96     <item>.txt</item> 97     <item>.java</item> 98     <item>.c</item> 99     <item>.cpp</item>100     <item>.py</item>101     <item>.xml</item>102     <item>.json</item>103     <item>.log</item>104     </array>105     <array name="fileEndingWord">106     <item>.doc</item>107     <item>.docx</item>108     </array>109     <array name="fileEndingExcel">110     <item>.xls</item>111     <item>.xlsx</item>112     </array>113     <array name="fileEndingPPT">114     <item>.ppt</item>115     <item>.pptx</item>116     </array>117      118     <array name="fileEndingPdf">119     <item>.pdf</item>120     </array>121     </resources>df</item>122     </array>123     </resources>

2、定义OpenFiles工具类,只需传输File参数即可,然后通过返回的Intent打开文件

View Code
  1     public class OpenFiles {  2     //android获取一个用于打开HTML文件的intent  3     public static Intent getHtmlFileIntent(File file)  4     {  5     Uri uri = Uri.parse(file.toString()).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(file.toString()).build();  6     Intent intent = new Intent("android.intent.action.VIEW");  7     intent.setDataAndType(uri, "text/html");  8     return intent;  9     } 10     //android获取一个用于打开图片文件的intent 11     public static Intent getImageFileIntent(File file) 12     { 13     Intent intent = new Intent("android.intent.action.VIEW"); 14     intent.addCategory("android.intent.category.DEFAULT"); 15     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 16     Uri uri = Uri.fromFile(file); 17     intent.setDataAndType(uri, "image/*"); 18     return intent; 19     } 20     //android获取一个用于打开PDF文件的intent 21     public static Intent getPdfFileIntent(File file) 22     { 23     Intent intent = new Intent("android.intent.action.VIEW"); 24     intent.addCategory("android.intent.category.DEFAULT"); 25     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 26     Uri uri = Uri.fromFile(file); 27     intent.setDataAndType(uri, "application/pdf"); 28     return intent; 29     } 30     //android获取一个用于打开文本文件的intent 31     public static Intent getTextFileIntent(File file) 32     { 33     Intent intent = new Intent("android.intent.action.VIEW"); 34     intent.addCategory("android.intent.category.DEFAULT"); 35     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 36     Uri uri = Uri.fromFile(file); 37     intent.setDataAndType(uri, "text/plain"); 38     return intent; 39     } 40       41     //android获取一个用于打开音频文件的intent 42     public static Intent getAudioFileIntent(File file) 43     { 44     Intent intent = new Intent("android.intent.action.VIEW"); 45     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 46     intent.putExtra("oneshot", 0); 47     intent.putExtra("configchange", 0); 48     Uri uri = Uri.fromFile(file); 49     intent.setDataAndType(uri, "audio/*"); 50     return intent; 51     } 52     //android获取一个用于打开视频文件的intent 53     public static Intent getVideoFileIntent(File file) 54     { 55     Intent intent = new Intent("android.intent.action.VIEW"); 56     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 57     intent.putExtra("oneshot", 0); 58     intent.putExtra("configchange", 0); 59     Uri uri = Uri.fromFile(file); 60     intent.setDataAndType(uri, "video/*"); 61     return intent; 62     } 63       64       65     //android获取一个用于打开CHM文件的intent 66     public static Intent getChmFileIntent(File file) 67     { 68     Intent intent = new Intent("android.intent.action.VIEW"); 69     intent.addCategory("android.intent.category.DEFAULT"); 70     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 71     Uri uri = Uri.fromFile(file); 72     intent.setDataAndType(uri, "application/x-chm"); 73     return intent; 74     } 75       76       77     //android获取一个用于打开Word文件的intent 78     public static Intent getWordFileIntent(File file) 79     { 80     Intent intent = new Intent("android.intent.action.VIEW"); 81     intent.addCategory("android.intent.category.DEFAULT"); 82     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 83     Uri uri = Uri.fromFile(file); 84     intent.setDataAndType(uri, "application/msword"); 85     return intent; 86     } 87     //android获取一个用于打开Excel文件的intent 88     public static Intent getExcelFileIntent(File file) 89     { 90     Intent intent = new Intent("android.intent.action.VIEW"); 91     intent.addCategory("android.intent.category.DEFAULT"); 92     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 93     Uri uri = Uri.fromFile(file); 94     intent.setDataAndType(uri, "application/vnd.ms-excel"); 95     return intent; 96     } 97     //android获取一个用于打开PPT文件的intent 98     public static Intent getPPTFileIntent(File file) 99     {100     Intent intent = new Intent("android.intent.action.VIEW");101     intent.addCategory("android.intent.category.DEFAULT");102     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);103     Uri uri = Uri.fromFile(file);104     intent.setDataAndType(uri, "application/vnd.ms-powerpoint");105     return intent;106     }107     //android获取一个用于打开apk文件的intent108     public static Intent getApkFileIntent(File file)109     {110     Intent intent = new Intent();111     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);112     intent.setAction(android.content.Intent.ACTION_VIEW);113     intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");114     return intent;115     }116      117      118     }

3、定义用于检查要打开的文件的后缀是否在遍历后缀数组中

View Code
1     private boolean checkEndsWithInStringArray(String checkItsEnd,2     String[] fileEndings){3     for(String aEnd : fileEndings){4     if(checkItsEnd.endsWith(aEnd))5     return true;6     }7     return false;8     }

4、通过调用OpenFiles类返回的Intent,打开相应的文件

View Code
 1     if(currentPath!=null&¤tPath.isFile()) 2     { 3     String fileName = currentPath.toString(); 4     Intent intent; 5     if(checkEndsWithInStringArray(fileName, getResources(). 6     getStringArray(R.array.fileEndingImage))){ 7     intent = OpenFiles.getImageFileIntent(currentPath); 8     startActivity(intent); 9     }else if(checkEndsWithInStringArray(fileName, getResources().10     getStringArray(R.array.fileEndingWebText))){11     intent = OpenFiles.getHtmlFileIntent(currentPath);12     startActivity(intent);13     }else if(checkEndsWithInStringArray(fileName, getResources().14     getStringArray(R.array.fileEndingPackage))){15     intent = OpenFiles.getApkFileIntent(currentPath);16     startActivity(intent);17      18     }else if(checkEndsWithInStringArray(fileName, getResources().19     getStringArray(R.array.fileEndingAudio))){20     intent = OpenFiles.getAudioFileIntent(currentPath);21     startActivity(intent);22     }else if(checkEndsWithInStringArray(fileName, getResources().23     getStringArray(R.array.fileEndingVideo))){24     intent = OpenFiles.getVideoFileIntent(currentPath);25     startActivity(intent);26     }else if(checkEndsWithInStringArray(fileName, getResources().27     getStringArray(R.array.fileEndingText))){28     intent = OpenFiles.getTextFileIntent(currentPath);29     startActivity(intent);30     }else if(checkEndsWithInStringArray(fileName, getResources().31     getStringArray(R.array.fileEndingPdf))){32     intent = OpenFiles.getPdfFileIntent(currentPath);33     startActivity(intent);34     }else if(checkEndsWithInStringArray(fileName, getResources().35     getStringArray(R.array.fileEndingWord))){36     intent = OpenFiles.getWordFileIntent(currentPath);37     startActivity(intent);38     }else if(checkEndsWithInStringArray(fileName, getResources().39     getStringArray(R.array.fileEndingExcel))){40     intent = OpenFiles.getExcelFileIntent(currentPath);41     startActivity(intent);42     }else if(checkEndsWithInStringArray(fileName, getResources().43     getStringArray(R.array.fileEndingPPT))){44     intent = OpenFiles.getPPTFileIntent(currentPath);45     startActivity(intent);46     }else47     {48     showMessage("无法打开,请安装相应的软件!");49     }50     }else51     {52     showMessage("对不起,这不是文件!");53     }

 


<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击