zoukankan      html  css  js  c++  java
  • 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>.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("对不起,这不是文件!");
                    }

    效果

  • 相关阅读:
    Java 实现 蓝桥杯 生兔子问题
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 蓝桥杯 基因牛的繁殖
    Java实现 LeetCode 33 搜索旋转排序数组
    Java实现 LeetCode 33 搜索旋转排序数组
    Java实现 LeetCode 33 搜索旋转排序数组
    深入探究VC —— 资源编译器rc.exe(3)
    深入探究VC —— 编译器cl.exe(2)
    深入探究VC —— 编译器cl.exe(1)
  • 原文地址:https://www.cnblogs.com/loulijun/p/2450866.html
Copyright © 2011-2022 走看看