在写文件管理系统时会用到各种打开不同格式的文件的需求,由于Android系统默认内置了一些可以打开的系统应用,但还是不能满足需求,比如打开视频文件、word等,需要安装相应的播放软件才可以使用,这时程序会通过Intent查找可以使用的软件
实现通过代码打开一个文件需要2部分,一部分是要获取到不同文件的后缀,以便根据需求匹配相应的Intent,另一个就是不同格式的文件打开的Intent不同
<?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>
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("对不起,这不是文件!"); }
效果如下:
相关推荐
2. android 4-Activity and Intent.pptx - 这个文件可能是关于Android的第4节,专门讨论Activity和Intent的关系。可能会深入解释Activity的生命周期与Intent如何影响其状态变化,比如如何通过Intent启动Activity以及...
Android 中使用 Intent 打开各种文件类型 Android 操作系统提供了 Intent 机制,允许应用程序之间进行交互和通信。Intent 是一个异步的消息机制,用于在应用程序之间请求或提供服务。通过使用 Intent,可以实现打开...
标题与描述中的关键词“android用于打开各种文件的intent”揭示了本文将探讨的主题:在Android平台上,如何使用Intent机制来启动应用程序以打开不同类型的文件。Intent是Android四大组件之一,它提供了一种方式来...
5. **Intent的使用**: 在新的Activity的`onCreate()`方法中,我们可以使用`getIntent().getExtras()`来获取之前在Intent中存储的数据,然后根据这些数据来展示相应的内容。 6. **代码示例**: - 在GridView的适配器...
Android7.0 Intent打开文件管理器 获取文件真实路径。虽然网上很多demo,但是没有一个能够兼容所有Android机的,去网上学习了然后自己亲测过手机分别有Android7.0/6.0/4.3个版本。
android intent和intent action大全
React Native Android模块使用Android的Intent操作将文本发送到可共享的应用程序或拨打电话或打开第三方应用程序。 当您需要在Android设备中的应用之间共享一些文本,并且如果您有有效的电话号码直接拨打电话(如果...
一个React Native插件,使React Native应用程序能够从另一个应用程序接收共享的照片,视频,文本,URL或任何其他文件类型。 此外,还支持iOS Share扩展并自动启动主机应用程序。 查看提供的示例以获取更多信息。 ...
本压缩包"Android代码-Intent切换.zip"很可能包含了一些关于如何使用Intent进行界面跳转和数据传递的示例代码。 Intent主要分为显式Intent和隐式Intent两种类型。显式Intent明确指定了要启动的目标组件,通常在同一...
在`fileProviderDemo-master`这个项目中,你可以找到一个完整的示例,展示如何在Android 7.0上使用`FileProvider`来访问文件并打开相机。通过查看源代码,你可以更好地理解上述步骤的实现细节,同时也可以作为你的...
android-studio中的intent和intent 过滤器详细介绍
在Android开发中,Intent是一种非常重要的组件间通信(IPC)机制。Intent主要用于启动或与其它应用程序组件进行交互,如活动(Activity)、服务...理解并熟练掌握Intent的使用,是提升Android应用开发能力的关键步骤。
本自学笔记将深入探讨Intent的使用、分类及其在Android系统中的作用。 Intent主要用于启动一个活动(Activity)、服务(Service)或者传递数据。在Android应用中,活动是用户界面的基本单元,而服务则在后台执行...
本篇文章将深入探讨Intent的基本概念、类型、构造方法以及如何在Android中有效地使用Intent。 Intent是一种意图声明,表达了应用程序想要执行的操作。在Android系统中,Intent分为显式Intent和隐式Intent两种类型。...
在Android应用开发中,Activity和Intent是...掌握Activity的生命周期管理和Intent的使用,是成为一名合格的Android开发者必不可少的基础技能。通过深入理解这两个概念,开发者可以构建出更加灵活、高效的Android应用。
本篇将详细讲解如何通过代码实现在Android应用中打开这些第三方地图应用。 首先,我们需要确保用户已经安装了目标地图应用。在Android中,我们可以使用`PackageManager`类来检查特定应用是否已安装。以下是一个简单...
- 调用选择器:通过调用提供的方法打开文件选择器,如`FilePickerActivity.startActivityForResult()`,并实现`onActivityResult`方法处理选择结果。 - 处理结果:在`onActivityResult`中解析返回的数据,获取用户...
这个“7-3-2-GridView-事件-Intent-传递参数包括图片ID.rar”文件应该包含了一个示例项目,演示了如何在GridView中处理点击事件并使用Intent传递包括图片ID在内的参数。 首先,我们来看`GridView`的基本用法。...