基于android中的文件启动Activity

Gal*_*lal 5 android android-intent mime-types

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

我怎样才能做到这一点?当然不是全部,但我如何确定哪个应用程序可以处理文件(如果有的话).

Noe*_*oel 7

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

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

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

Intent intent = new Intent();
intent.setType(type);
Run Code Online (Sandbox Code Playgroud)

最后,您要检查是否有任何活动可以使用该类型解析意图.这可以通过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
}
Run Code Online (Sandbox Code Playgroud)


And*_*ite 0

基于...

如何确定哪些应用程序可以处理文件(如果有)?

我认为您想要的是PackageManager.queryIntentActivities,您可以在其中根据目标文件创建一个意图,然后读取返回的列表。