Android杂谈--打开文件的Intent及使用

来源:互联网 发布:淘宝图片怎么拍好看 编辑:程序博客网 时间:2024/05/02 15:40

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

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

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

复制代码
<?xml version="1.0" encoding="utf-8"?><resources><array name="fileEndingImage">        <item>.png</item>        <item>.gif</item>        <item>.jpg</item>        <item>.jpeg</item>        <item>.bmp</item>    </array><array name="fileEndingAudio">        <item>.mp3</item>        <item>.wav</item>        <item>.ogg</item>        <item>.midi</item>    </array><array name="fileEndingVideo">        <item>.mp4</item>        <item>.rmvb</item>        <item>.avi</item>        <item>.flv</item>    </array><array name="fileEndingPackage">        <item>.jar</item>        <item>.zip</item>        <item>.rar</item>        <item>.gz</item>        <item>.apk</item>        <item>.img</item>    </array><array name="fileEndingWebText">        <item>.htm</item>        <item>.html</item>        <item>.php</item>        <item>.jsp</item>    </array><array name="fileEndingText">        <item>.txt</item>        <item>.java</item>        <item>.c</item>        <item>.cpp</item>        <item>.py</item>        <item>.xml</item>        <item>.json</item>        <item>.log</item>    </array><array name="fileEndingWord">    <item>.doc</item>    <item>.docx</item></array><array name="fileEndingExcel">    <item>.xls</item>    <item>.xlsx</item></array><array name="fileEndingPPT">    <item>.ppt</item>    <item>.pptx</item></array><array name="fileEndingPdf">    <item>.pdf</item></array></resources>
复制代码

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

复制代码
public class OpenFiles {     //android获取一个用于打开HTML文件的intent       public static Intent getHtmlFileIntent(File file)       {           Uri uri = Uri.parse(file.toString()).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(file.toString()).build();           Intent intent = new Intent("android.intent.action.VIEW");           intent.setDataAndType(uri, "text/html");           return intent;       }     //android获取一个用于打开图片文件的intent       public static Intent getImageFileIntent(File file)       {           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(file);           intent.setDataAndType(uri, "image/*");           return intent;       }       //android获取一个用于打开PDF文件的intent       public static Intent getPdfFileIntent(File file)       {         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(file);         intent.setDataAndType(uri, "application/pdf");         return intent;       }     //android获取一个用于打开文本文件的intent     public static Intent getTextFileIntent(File file)     {           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(file);       intent.setDataAndType(uri, "text/plain");       return intent;     }         //android获取一个用于打开音频文件的intent       public static Intent getAudioFileIntent(File file)       {         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(file);         intent.setDataAndType(uri, "audio/*");         return intent;       }       //android获取一个用于打开视频文件的intent       public static Intent getVideoFileIntent(File file)       {         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(file);         intent.setDataAndType(uri, "video/*");         return intent;       }               //android获取一个用于打开CHM文件的intent       public static Intent getChmFileIntent(File file)       {         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(file);         intent.setDataAndType(uri, "application/x-chm");         return intent;       }             //android获取一个用于打开Word文件的intent       public static Intent getWordFileIntent(File file)       {         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(file);         intent.setDataAndType(uri, "application/msword");         return intent;       }     //android获取一个用于打开Excel文件的intent       public static Intent getExcelFileIntent(File file)       {         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(file);         intent.setDataAndType(uri, "application/vnd.ms-excel");         return intent;       }     //android获取一个用于打开PPT文件的intent       public static Intent getPPTFileIntent(File file)       {         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(file);         intent.setDataAndType(uri, "application/vnd.ms-powerpoint");         return intent;       }       //android获取一个用于打开apk文件的intent       public static Intent getApkFileIntent(File file)       {           Intent intent = new Intent();             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);             intent.setAction(android.content.Intent.ACTION_VIEW);             intent.setDataAndType(Uri.fromFile(file),  "application/vnd.android.package-archive");             return intent;       }              }
复制代码

 

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

复制代码
    private boolean checkEndsWithInStringArray(String checkItsEnd,                     String[] fileEndings){        for(String aEnd : fileEndings){            if(checkItsEnd.endsWith(aEnd))                return true;        }        return false;    }
复制代码

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

复制代码
if(currentPath!=null&&currentPath.isFile())                {                    String fileName = currentPath.toString();                    Intent intent;                    if(checkEndsWithInStringArray(fileName, getResources().                            getStringArray(R.array.fileEndingImage))){                        intent = OpenFiles.getImageFileIntent(currentPath);                        startActivity(intent);                    }else if(checkEndsWithInStringArray(fileName, getResources().                            getStringArray(R.array.fileEndingWebText))){                        intent = OpenFiles.getHtmlFileIntent(currentPath);                        startActivity(intent);                    }else if(checkEndsWithInStringArray(fileName, getResources().                            getStringArray(R.array.fileEndingPackage))){                        intent = OpenFiles.getApkFileIntent(currentPath);                        startActivity(intent);                    }else if(checkEndsWithInStringArray(fileName, getResources().                            getStringArray(R.array.fileEndingAudio))){                        intent = OpenFiles.getAudioFileIntent(currentPath);                        startActivity(intent);                    }else if(checkEndsWithInStringArray(fileName, getResources().                            getStringArray(R.array.fileEndingVideo))){                        intent = OpenFiles.getVideoFileIntent(currentPath);                        startActivity(intent);                    }else if(checkEndsWithInStringArray(fileName, getResources().                            getStringArray(R.array.fileEndingText))){                        intent = OpenFiles.getTextFileIntent(currentPath);                        startActivity(intent);                    }else if(checkEndsWithInStringArray(fileName, getResources().                            getStringArray(R.array.fileEndingPdf))){                        intent = OpenFiles.getPdfFileIntent(currentPath);                        startActivity(intent);                    }else if(checkEndsWithInStringArray(fileName, getResources().                            getStringArray(R.array.fileEndingWord))){                        intent = OpenFiles.getWordFileIntent(currentPath);                        startActivity(intent);                    }else if(checkEndsWithInStringArray(fileName, getResources().                            getStringArray(R.array.fileEndingExcel))){                        intent = OpenFiles.getExcelFileIntent(currentPath);                        startActivity(intent);                    }else if(checkEndsWithInStringArray(fileName, getResources().                            getStringArray(R.array.fileEndingPPT))){                        intent = OpenFiles.getPPTFileIntent(currentPath);                        startActivity(intent);                    }else                    {                        showMessage("无法打开,请安装相应的软件!");                    }                }else                {                    showMessage("对不起,这不是文件!");                }
复制代码

效果


转自:http://www.cnblogs.com/loulijun/archive/2012/04/15/2450866.html
0 0
原创粉丝点击