Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在android中启动基于文件的活动_Android_Android Intent_Mime Types - Fatal编程技术网

在android中启动基于文件的活动

在android中启动基于文件的活动,android,android-intent,mime-types,Android,Android Intent,Mime Types,我正在开发一个应用程序,其中列出文件夹中的文件(在ListView中)。当用户单击其中一个项目时,如果它是一个文件,那么我希望启动一个可以处理它的活动(如果有),或者如果没有,则显示某种错误消息 我该怎么做?当然不是全部,但我如何确定哪些应用程序可以处理文件(如果有的话)。基于 如何确定哪些应用程序可以处理文件(如果有) 我认为您需要的是基于目标文件创建意图,然后读取返回的列表。首先,您需要确定文件的MIME类型。您可以使用以下方法执行此操作: 一旦知道MIME类型,就可以为该类型创建意图: I

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

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

基于

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


我认为您需要的是基于目标文件创建意图,然后读取返回的列表。

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

一旦知道MIME类型,就可以为该类型创建意图:

Intent intent = new Intent();
intent.setType(type);
最后,您要检查是否有任何活动可以使用该类型解析意图。这可以通过以下方式完成:

PackageManager=getPackageManager();//我假设这是在一个活动中完成的。这是一个上下文方法。
列表解析程序=manager.querytentActivities(intent,0);
if(resolvers.isEmpty()){
//显示错误
}否则{
//启动intent。您还需要根据文件的uri设置数据
}

关于这一点,还有许多其他类似的帖子,但没有具体的内容,也没有回答我的问题,所以请在将其标记为副本之前仔细阅读其他帖子。我尝试过这个,它与一些扩展名(如“pdf”和“doc”)配合使用,效果很好,但当我使用“JPG”时,它会给我一个很长的无意义列表;它将GPS等系统工具显示为可以处理“JPG”的应用程序。还有其他建议吗?PackageManager中还有一个getPreferredActivities()方法,您可以利用该方法确定是否存在处理特定MIME类型的首选应用程序,否则,这就是预期的android行为。
Intent intent = new Intent();
intent.setType(type);
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
}