zoukankan      html  css  js  c++  java
  • Android开发打开文件的Intent及使用

    在写文件管理系统时会用到各种打开不同格式的文件的需求,由于Android系统默认内置了一些可以打开的系统应用,但还是不能满足需求,比如打开视频文 件、word等,需要安装相应的播放软件才可以使用,这时程序会通过Intent查找可以使用的软件实现通过代码打开一个文件需要2部分,一部分是要获取 到不同文件的后缀,以便根据需求匹配相应的Intent,另一个就是不同格式的文件打开的Intent不同1、在values目录下定义后缀数组文件 fileendings

    View Code
      1     <?xml version="1.0" encoding="utf-8"?>
      2     <resources>
      3     <array name="fileEndingImage">
      4     <item>.png</item>
      5     <item>.gif</item>
      6     <item>.jpg</item>
      7     <item>.jpeg</item>
      8     <item>.bmp</item>
      9     </array>
     10     <array name="fileEndingAudio">
     11     <item>.mp3</item>
     12     <item>.wav</item>
     13     <item>.ogg</item>
     14     <item>.midi</item>
     15     </array>
     16     <array name="fileEndingVideo">
     17     <item>.mp4</item>
     18     <item>.rmvb</item>
     19     <item>.avi</item>
     20     <item>.flv</item>
     21     </array>
     22     <array name="fileEndingPackage">
     23     <item>.jar</item>
     24     <item>.zip</item>
     25     <item>.rar</item>
     26     <item>.gz</item>
     27     <item>.apk</item>
     28     <item>.img</item>
     29     </array>
     30     <array name="fileEndingWebText">
     31     <item>.htm</item>
     32     <item>.html</item>
     33     <item>.php</item>
     34     <item>.jsp</item>
     35     </array>
     36     <array name="fileEndingText">
     37     <item>.txt</item>
     38     <item>.java</item>
     39     <item>.c</item>
     40     <item>.cpp</item>
     41     <item>.py</item>
     42     <item>.xml</item>
     43     <item>.json</item>
     44     <item>.log</item>
     45     </array>
     46     <array name="fileEndingWord">
     47     <item>.doc</item>
     48     <item>.docx</item>
     49     </array>
     50     <array name="fileEndingExcel">
     51     <item>.xls</item>
     52     <item>.xlsx</item>
     53     </array>
     54     <array name="fileEndingPPT">
     55     <item>.ppt</item>
     56     <item>.pptx</item>
     57     </array>
     58      
     59     <array name="fileEndingPdf">
     60     <item>.p<?xml version="1.0" encoding="utf-8"?>
     61     <resources>
     62     <array name="fileEndingImage">
     63     <item>.png</item>
     64     <item>.gif</item>
     65     <item>.jpg</item>
     66     <item>.jpeg</item>
     67     <item>.bmp</item>
     68     </array>
     69     <array name="fileEndingAudio">
     70     <item>.mp3</item>
     71     <item>.wav</item>
     72     <item>.ogg</item>
     73     <item>.midi</item>
     74     </array>
     75     <array name="fileEndingVideo">
     76     <item>.mp4</item>
     77     <item>.rmvb</item>
     78     <item>.avi</item>
     79     <item>.flv</item>
     80     </array>
     81     <array name="fileEndingPackage">
     82     <item>.jar</item>
     83     <item>.zip</item>
     84     <item>.rar</item>
     85     <item>.gz</item>
     86     <item>.apk</item>
     87     <item>.img</item>
     88     </array>
     89     <array name="fileEndingWebText">
     90     <item>.htm</item>
     91     <item>.html</item>
     92     <item>.php</item>
     93     <item>.jsp</item>
     94     </array>
     95     <array name="fileEndingText">
     96     <item>.txt</item>
     97     <item>.java</item>
     98     <item>.c</item>
     99     <item>.cpp</item>
    100     <item>.py</item>
    101     <item>.xml</item>
    102     <item>.json</item>
    103     <item>.log</item>
    104     </array>
    105     <array name="fileEndingWord">
    106     <item>.doc</item>
    107     <item>.docx</item>
    108     </array>
    109     <array name="fileEndingExcel">
    110     <item>.xls</item>
    111     <item>.xlsx</item>
    112     </array>
    113     <array name="fileEndingPPT">
    114     <item>.ppt</item>
    115     <item>.pptx</item>
    116     </array>
    117      
    118     <array name="fileEndingPdf">
    119     <item>.pdf</item>
    120     </array>
    121     </resources>df</item>
    122     </array>
    123     </resources>

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

    View Code
      1     public class OpenFiles {
      2     //android获取一个用于打开HTML文件的intent
      3     public static Intent getHtmlFileIntent(File file)
      4     {
      5     Uri uri = Uri.parse(file.toString()).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(file.toString()).build();
      6     Intent intent = new Intent("android.intent.action.VIEW");
      7     intent.setDataAndType(uri, "text/html");
      8     return intent;
      9     }
     10     //android获取一个用于打开图片文件的intent
     11     public static Intent getImageFileIntent(File file)
     12     {
     13     Intent intent = new Intent("android.intent.action.VIEW");
     14     intent.addCategory("android.intent.category.DEFAULT");
     15     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     16     Uri uri = Uri.fromFile(file);
     17     intent.setDataAndType(uri, "image/*");
     18     return intent;
     19     }
     20     //android获取一个用于打开PDF文件的intent
     21     public static Intent getPdfFileIntent(File file)
     22     {
     23     Intent intent = new Intent("android.intent.action.VIEW");
     24     intent.addCategory("android.intent.category.DEFAULT");
     25     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     26     Uri uri = Uri.fromFile(file);
     27     intent.setDataAndType(uri, "application/pdf");
     28     return intent;
     29     }
     30     //android获取一个用于打开文本文件的intent
     31     public static Intent getTextFileIntent(File file)
     32     {
     33     Intent intent = new Intent("android.intent.action.VIEW");
     34     intent.addCategory("android.intent.category.DEFAULT");
     35     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     36     Uri uri = Uri.fromFile(file);
     37     intent.setDataAndType(uri, "text/plain");
     38     return intent;
     39     }
     40      
     41     //android获取一个用于打开音频文件的intent
     42     public static Intent getAudioFileIntent(File file)
     43     {
     44     Intent intent = new Intent("android.intent.action.VIEW");
     45     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     46     intent.putExtra("oneshot", 0);
     47     intent.putExtra("configchange", 0);
     48     Uri uri = Uri.fromFile(file);
     49     intent.setDataAndType(uri, "audio/*");
     50     return intent;
     51     }
     52     //android获取一个用于打开视频文件的intent
     53     public static Intent getVideoFileIntent(File file)
     54     {
     55     Intent intent = new Intent("android.intent.action.VIEW");
     56     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     57     intent.putExtra("oneshot", 0);
     58     intent.putExtra("configchange", 0);
     59     Uri uri = Uri.fromFile(file);
     60     intent.setDataAndType(uri, "video/*");
     61     return intent;
     62     }
     63      
     64      
     65     //android获取一个用于打开CHM文件的intent
     66     public static Intent getChmFileIntent(File file)
     67     {
     68     Intent intent = new Intent("android.intent.action.VIEW");
     69     intent.addCategory("android.intent.category.DEFAULT");
     70     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     71     Uri uri = Uri.fromFile(file);
     72     intent.setDataAndType(uri, "application/x-chm");
     73     return intent;
     74     }
     75      
     76      
     77     //android获取一个用于打开Word文件的intent
     78     public static Intent getWordFileIntent(File file)
     79     {
     80     Intent intent = new Intent("android.intent.action.VIEW");
     81     intent.addCategory("android.intent.category.DEFAULT");
     82     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     83     Uri uri = Uri.fromFile(file);
     84     intent.setDataAndType(uri, "application/msword");
     85     return intent;
     86     }
     87     //android获取一个用于打开Excel文件的intent
     88     public static Intent getExcelFileIntent(File file)
     89     {
     90     Intent intent = new Intent("android.intent.action.VIEW");
     91     intent.addCategory("android.intent.category.DEFAULT");
     92     intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     93     Uri uri = Uri.fromFile(file);
     94     intent.setDataAndType(uri, "application/vnd.ms-excel");
     95     return intent;
     96     }
     97     //android获取一个用于打开PPT文件的intent
     98     public static Intent getPPTFileIntent(File file)
     99     {
    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、定义用于检查要打开的文件的后缀是否在遍历后缀数组中

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

    View Code
     1     if(currentPath!=null&¤tPath.isFile())
     2     {
     3     String fileName = currentPath.toString();
     4     Intent intent;
     5     if(checkEndsWithInStringArray(fileName, getResources().
     6     getStringArray(R.array.fileEndingImage))){
     7     intent = OpenFiles.getImageFileIntent(currentPath);
     8     startActivity(intent);
     9     }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     }
  • 相关阅读:
    Java IO2
    Java IO1 复制粘贴文件
    Java superArray2
    17杭州女子专场赛
    组队赛 A Promotions 深搜+逆向思维
    Java处理异常小试
    再谈Dijkstra算法和堆优化
    仿照JAVA vector模型写一个SuperArray
    HDU 2017女生赛04 (变形最短路)
    Gym-100712J 桶排序思想&反向思维
  • 原文地址:https://www.cnblogs.com/loonggg/p/2846436.html
Copyright © 2011-2022 走看看