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

在写文件管理系统时会用到各种打开不同格式的文件的需求,由于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>.p<?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>df</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&¤tPath.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("对不起,这不是文件!");
    }



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值