android打开文件的工具

在写文件管理系统时会用到各种打开不同格式的文件的需求,由于Android系统默认内置了一些可以打开的系统应用,但还是不能满足需求,比如打开视频文件、word等,需要安装相应的播放软件才可以使用,这时程序会通过Intent查找可以使用的软件

实现通过代码打开一个文件需要2部分,一部分是要获取到不同文件的后缀,以便根据需求匹配相应的Intent,另一个就是不同格式的文件打开的Intent不同

1、在values目录下定义后缀数组文件fileendings

01 <?xml version="1.0" encoding="utf-8"?>
02 <resources>
03  
04     <array name="fileEndingImage">
05         <item>.png</item>
06         <item>.gif</item>
07         <item>.jpg</item>
08         <item>.jpeg</item>
09         <item>.bmp</item>
10     </array>
11     <array name="fileEndingAudio">
12         <item>.mp3</item>
13         <item>.wav</item>
14         <item>.ogg</item>
15         <item>.midi</item>
16     </array>
17     <array name="fileEndingVideo">
18         <item>.mp4</item>
19         <item>.rmvb</item>
20         <item>.avi</item>
21         <item>.flv</item>
22     </array>
23     <array name="fileEndingPackage">
24         <item>.jar</item>
25         <item>.zip</item>
26         <item>.rar</item>
27         <item>.gz</item>
28         <item>.apk</item>
29         <item>.img</item>
30     </array>
31     <array name="fileEndingWebText">
32         <item>.htm</item>
33         <item>.html</item>
34         <item>.php</item>
35         <item>.jsp</item>
36     </array>
37     <array name="fileEndingText">
38         <item>.txt</item>
39         <item>.java</item>
40         <item>.c</item>
41         <item>.cpp</item>
42         <item>.py</item>
43         <item>.xml</item>
44         <item>.json</item>
45         <item>.log</item>
46     </array>
47     <array name="fileEndingWord">
48         <item>.doc</item>
49         <item>.docx</item>
50     </array>
51     <array name="fileEndingExcel">
52         <item>.xls</item>
53         <item>.xlsx</item>
54     </array>
55     <array name="fileEndingPPT">
56         <item>.ppt</item>
57         <item>.pptx</item>
58     </array>
59     <array name="fileEndingPdf">
60         <item>.pdf</item>
61     </array>
62  
63 </resources>

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

001 public class OpenFiles {
002      //android获取一个用于打开HTML文件的intent
003        public static Intent getHtmlFileIntent(File file)
004        {
005            Uri uri = Uri.parse(file.toString()).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(file.toString()).build();
006            Intent intent = new Intent("android.intent.action.VIEW");
007            intent.setDataAndType(uri, "text/html");
008            return intent;
009        }
010      //android获取一个用于打开图片文件的intent
011        public static Intent getImageFileIntent(File file)
012        {
013            Intent intent = new Intent("android.intent.action.VIEW");
014            intent.addCategory("android.intent.category.DEFAULT");
015            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
016            Uri uri = Uri.fromFile(file);
017            intent.setDataAndType(uri, "image/*");
018            return intent;
019        }
020        //android获取一个用于打开PDF文件的intent
021        public static Intent getPdfFileIntent(File file)
022        {
023          Intent intent = new Intent("android.intent.action.VIEW");
024          intent.addCategory("android.intent.category.DEFAULT");
025          intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
026          Uri uri = Uri.fromFile(file);
027          intent.setDataAndType(uri, "application/pdf");
028          return intent;
029        }
030      //android获取一个用于打开文本文件的intent
031      public static Intent getTextFileIntent(File file)
032      {   
033        Intent intent = new Intent("android.intent.action.VIEW");
034        intent.addCategory("android.intent.category.DEFAULT");
035        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
036        Uri uri = Uri.fromFile(file);
037        intent.setDataAndType(uri, "text/plain");
038        return intent;
039      }
040      
041      //android获取一个用于打开音频文件的intent
042        public static Intent getAudioFileIntent(File file)
043        {
044          Intent intent = new Intent("android.intent.action.VIEW");
045          intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
046          intent.putExtra("oneshot"0);
047          intent.putExtra("configchange"0);
048          Uri uri = Uri.fromFile(file);
049          intent.setDataAndType(uri, "audio/*");
050          return intent;
051        }
052        //android获取一个用于打开视频文件的intent
053        public static Intent getVideoFileIntent(File file)
054        {
055          Intent intent = new Intent("android.intent.action.VIEW");
056          intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
057          intent.putExtra("oneshot"0);
058          intent.putExtra("configchange"0);
059          Uri uri = Uri.fromFile(file);
060          intent.setDataAndType(uri, "video/*");
061          return intent;
062        }
063      
064      
065        //android获取一个用于打开CHM文件的intent
066        public static Intent getChmFileIntent(File file)
067        {
068          Intent intent = new Intent("android.intent.action.VIEW");
069          intent.addCategory("android.intent.category.DEFAULT");
070          intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
071          Uri uri = Uri.fromFile(file);
072          intent.setDataAndType(uri, "application/x-chm");
073          return intent;
074        }
075      
076      
077      //android获取一个用于打开Word文件的intent
078        public static Intent getWordFileIntent(File file)
079        {
080          Intent intent = new Intent("android.intent.action.VIEW");
081          intent.addCategory("android.intent.category.DEFAULT");
082          intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
083          Uri uri = Uri.fromFile(file);
084          intent.setDataAndType(uri, "application/msword");
085          return intent;
086        }
087      //android获取一个用于打开Excel文件的intent
088        public static Intent getExcelFileIntent(File file)
089        {
090          Intent intent = new Intent("android.intent.action.VIEW");
091          intent.addCategory("android.intent.category.DEFAULT");
092          intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
093          Uri uri = Uri.fromFile(file);
094          intent.setDataAndType(uri, "application/vnd.ms-excel");
095          return intent;
096        }
097      //android获取一个用于打开PPT文件的intent
098        public static Intent getPPTFileIntent(File file)
099        {
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文件的intent
108        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、定义用于检查要打开的文件的后缀是否在遍历后缀数组中

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,打开相应的文件

01 if(currentPath!=null&&currentPath.isFile())
02                 {
03                     String fileName = currentPath.toString();
04                     Intent intent;
05                     if(checkEndsWithInStringArray(fileName, getResources().
06                             getStringArray(R.array.fileEndingImage))){
07                         intent = OpenFiles.getImageFileIntent(currentPath);
08                         startActivity(intent);
09                     }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                     }else
47                     {
48                         showMessage("无法打开,请安装相应的软件!");
49                     }
50                 }else
51                 {
52                     showMessage("对不起,这不是文件!");
53                 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值