android - 基于android中的文件启动Activity

标签 android android-intent mime-types

我正在开发一个应用程序,它列出文件夹中的文件(在 ListView 中)。当用户单击其中一个项目时,如果它是一个文件,那么我想启动一个可以处理它的 Activity (如果有的话),或者如果没有则显示某种错误消息。

我该怎么做?当然,这不是全部,但我如何确定哪个应用程序可以处理文件(如果有)。

最佳答案

首先,您需要确定文件的 MIME 类型。您可以使用 MimeTypeMap 执行此操作:

MimeTypeMap map = MimeTypeMap.getSingleton();
String extension = map.getFileExtensionFromUrl(url); // url is the url/location of your file
String type = map.getMimeTypeFromExtension(extension);

然后,一旦您知道了 MIME 类型,就可以为该类型创建一个 Intent :

Intent intent = new Intent();
intent.setType(type);

最后,您要检查是否有任何 Activity 可以解决该类型的 Intent 。这可以通过 PackageManager 完成:

PackageManager manager = getPackageManager(); // I'm assuming this is done from within an activity. This a Context method.
List<ResolveInfo> resolvers = manager.queryIntentActivities(intent, 0);
if (resolvers.isEmpty()) {
  // display error
} else {
  // launch the intent. You will also want to set the data based on the uri of your file
}

关于android - 基于android中的文件启动Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6338273/

相关文章:

Android:没有找到处理 Intent 错误的 Activity ?将如何解决

json - 如何使用具有正确 MIME 类型的 httprouter 提供静态文件?

http - .ts 文件始终被识别为 text/vnd.trolltech.linguist 而不会被识别为 video/mp2t

java - 预先存在的 vb.net/sql 服务器桌面 crud 应用程序的智能手机可访问性的选择

android - 将 EditText View 动态添加到水平 ScrollView

Android 2.2 - 如何检测我是否安装在 SDCard 上?

android - 如何知道用户是否订阅了 FCM 中的主题?

android - 为 MediaStore.ACTION_VIDEO_CAPTURE 设置最大持续时间的稳定方法

android - 从 Activity 切换到嵌套的 PreferenceScreen

c++ - gcc 创建 mime 类型 application/x-sharedlib 而不是 application/x-application