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("对不起,这不是文件!");
                    }

    效果

  • 相关阅读:
    Ubuntu14.0.4 64位 ADT 连接手机调试问题
    Ubuntu14.0.4 64位安装ADT问题
    Uubntu scrot 的简单使用
    Ubuntu14.0.4 64位安装Chrome浏览器
    Android DatePickerDialog 只选择年月
    Java 正则提取数字串
    客户端HttpClient处理 Servlet Gzip
    Ext常用Tool
    python使用 requirements.txt 管理所需的包
    PyQt5安装及ModuleNotFoundError: No module named 'PyQt5'问题解决
  • 原文地址:https://www.cnblogs.com/loulijun/p/2450866.html
Copyright © 2011-2022 走看看