首页 > 系统 > Android > 正文

Android编程开发之打开文件的Intent及使用方法

2019-10-24 20:34:58
字体:
来源:转载
供稿:网友

这篇文章主要介绍了Android编程开发之打开文件的Intent及使用方法,已实例形式分析了Android打开文件Intent的相关布局及功能实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了Android编程开发之打开文件的Intent及使用方法。分享给大家供大家参考,具体如下:

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

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

 

 
  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. <array name="fileEndingPdf">  
  59. <item>.p<?xml version="1.0" encoding="utf-8"?>  
  60. <resources>  
  61. <array name="fileEndingImage">  
  62. <item>.png</item>  
  63. <item>.gif</item>  
  64. <item>.jpg</item>  
  65. <item>.jpeg</item>  
  66. <item>.bmp</item>  
  67. </array>  
  68. <array name="fileEndingAudio">  
  69. <item>.mp3</item>  
  70. <item>.wav</item>  
  71. <item>.ogg</item>  
  72. <item>.midi</item>  
  73. </array>  
  74. <array name="fileEndingVideo">  
  75. <item>.mp4</item>  
  76. <item>.rmvb</item>  
  77. <item>.avi</item>  
  78. <item>.flv</item>  
  79. </array>  
  80. <array name="fileEndingPackage">  
  81. <item>.jar</item>  
  82. <item>.zip</item>  
  83. <item>.rar</item>  
  84. <item>.gz</item>  
  85. <item>.apk</item>  
  86. <item>.img</item>  
  87. </array>  
  88. <array name="fileEndingWebText">  
  89. <item>.htm</item>  
  90. <item>.html</item>  
  91. <item>.php</item>  
  92. <item>.jsp</item>  
  93. </array>  
  94. <array name="fileEndingText">  
  95. <item>.txt</item>  
  96. <item>.java</item>  
  97. <item>.c</item>  
  98. <item>.cpp</item>  
  99. <item>.py</item>  
  100. <item>.xml</item>  
  101. <item>.json</item>  
  102. <item>.log</item>  
  103. </array>  
  104. <array name="fileEndingWord">  
  105. <item>.doc</item>  
  106. <item>.docx</item>  
  107. </array>  
  108. <array name="fileEndingExcel">  
  109. <item>.xls</item>  
  110. <item>.xlsx</item>  
  111. </array>  
  112. <array name="fileEndingPPT">  
  113. <item>.ppt</item>  
  114. <item>.pptx</item>  
  115. </array>  
  116. <array name="fileEndingPdf">  
  117. <item>.pdf</item>  
  118. </array>  
  119. </resources>df</item>  
  120. </array>  
  121. </resources> 

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

 

 
  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. //android获取一个用于打开音频文件的intent  
  41. public static Intent getAudioFileIntent(File file)  
  42. {  
  43. Intent intent = new Intent("android.intent.action.VIEW");  
  44. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  45. intent.putExtra("oneshot", 0);  
  46. intent.putExtra("configchange", 0);  
  47. Uri uri = Uri.fromFile(file);  
  48. intent.setDataAndType(uri, "audio/*");  
  49. return intent;  
  50. }  
  51. //android获取一个用于打开视频文件的intent  
  52. public static Intent getVideoFileIntent(File file)  
  53. {  
  54. Intent intent = new Intent("android.intent.action.VIEW");  
  55. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  56. intent.putExtra("oneshot", 0);  
  57. intent.putExtra("configchange", 0);  
  58. Uri uri = Uri.fromFile(file);  
  59. intent.setDataAndType(uri, "video/*");  
  60. return intent;  
  61. }  
  62. //android获取一个用于打开CHM文件的intent  
  63. public static Intent getChmFileIntent(File file)  
  64. {  
  65. Intent intent = new Intent("android.intent.action.VIEW");  
  66. intent.addCategory("android.intent.category.DEFAULT");  
  67. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  68. Uri uri = Uri.fromFile(file);  
  69. intent.setDataAndType(uri, "application/x-chm");  
  70. return intent;  
  71. }  
  72. //android获取一个用于打开Word文件的intent  
  73. public static Intent getWordFileIntent(File file)  
  74. {  
  75. Intent intent = new Intent("android.intent.action.VIEW");  
  76. intent.addCategory("android.intent.category.DEFAULT");  
  77. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  78. Uri uri = Uri.fromFile(file);  
  79. intent.setDataAndType(uri, "application/msword");  
  80. return intent;  
  81. }  
  82. //android获取一个用于打开Excel文件的intent  
  83. public static Intent getExcelFileIntent(File file)  
  84. {  
  85. Intent intent = new Intent("android.intent.action.VIEW");  
  86. intent.addCategory("android.intent.category.DEFAULT");  
  87. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  88. Uri uri = Uri.fromFile(file);  
  89. intent.setDataAndType(uri, "application/vnd.ms-excel");  
  90. return intent;  
  91. }  
  92. //android获取一个用于打开PPT文件的intent  
  93. public static Intent getPPTFileIntent(File file)  
  94. {  
  95. Intent intent = new Intent("android.intent.action.VIEW");  
  96. intent.addCategory("android.intent.category.DEFAULT");  
  97. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  98. Uri uri = Uri.fromFile(file);  
  99. intent.setDataAndType(uri, "application/vnd.ms-powerpoint");  
  100. return intent;  
  101. }  
  102. //android获取一个用于打开apk文件的intent  
  103. public static Intent getApkFileIntent(File file)  
  104. {  
  105. Intent intent = new Intent();  
  106. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
  107. intent.setAction(android.content.Intent.ACTION_VIEW);  
  108. intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");  
  109. return intent;  
  110. }  

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

 

 
  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;  

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

 

 
  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. }else if(checkEndsWithInStringArray(fileName, getResources().  
  18. getStringArray(R.array.fileEndingAudio))){  
  19. intent = OpenFiles.getAudioFileIntent(currentPath);  
  20. startActivity(intent);  
  21. }else if(checkEndsWithInStringArray(fileName, getResources().  
  22. getStringArray(R.array.fileEndingVideo))){  
  23. intent = OpenFiles.getVideoFileIntent(currentPath);  
  24. startActivity(intent);  
  25. }else if(checkEndsWithInStringArray(fileName, getResources().  
  26. getStringArray(R.array.fileEndingText))){  
  27. intent = OpenFiles.getTextFileIntent(currentPath);  
  28. startActivity(intent);  
  29. }else if(checkEndsWithInStringArray(fileName, getResources().  
  30. getStringArray(R.array.fileEndingPdf))){  
  31. intent = OpenFiles.getPdfFileIntent(currentPath);  
  32. startActivity(intent);  
  33. }else if(checkEndsWithInStringArray(fileName, getResources().  
  34. getStringArray(R.array.fileEndingWord))){  
  35. intent = OpenFiles.getWordFileIntent(currentPath);  
  36. startActivity(intent);  
  37. }else if(checkEndsWithInStringArray(fileName, getResources().  
  38. getStringArray(R.array.fileEndingExcel))){  
  39. intent = OpenFiles.getExcelFileIntent(currentPath);  
  40. startActivity(intent);  
  41. }else if(checkEndsWithInStringArray(fileName, getResources().  
  42. getStringArray(R.array.fileEndingPPT))){  
  43. intent = OpenFiles.getPPTFileIntent(currentPath);  
  44. startActivity(intent);  
  45. }else 
  46. {  
  47. showMessage("无法打开,请安装相应的软件!");  
  48. }  
  49. }else 
  50. {  
  51. showMessage("对不起,这不是文件!");  
  52. }  

希望本文所述对大家Android程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表