在Android中,如何根据文件类型显示应用程序选择器?

在Android中,如何根据文件类型显示应用程序选择器?,android,Android,道歉,如果这已经得到了回答-如果有人可以告诉我一个已经回答的问题,那将是伟大的 非常简单,我希望能够弹出一个可以处理给定类型文件的应用程序列表-例如,如果我有一个音乐文件(mp3、ogg等),我希望能够显示一个可以处理该文件的所有加载媒体应用程序的列表,并允许用户选择一个 我一直在尝试创建一个如下意图: Intent myIntent = new Intent(); myIntent.setAction(Intent.ACTION_VIEW); myIntent.addCategory("and

道歉,如果这已经得到了回答-如果有人可以告诉我一个已经回答的问题,那将是伟大的

非常简单,我希望能够弹出一个可以处理给定类型文件的应用程序列表-例如,如果我有一个音乐文件(mp3、ogg等),我希望能够显示一个可以处理该文件的所有加载媒体应用程序的列表,并允许用户选择一个

我一直在尝试创建一个如下意图:

Intent myIntent = new Intent();
myIntent.setAction(Intent.ACTION_VIEW);
myIntent.addCategory("android.intent.category.LAUNCHER");
myIntent.setType("mp3");
startActivity(myIntent);
但我显然弄错了,因为它每次都会崩溃。我应该使用ACTION\u PICK或ACTION\u CHOOSER而不是ACTION\u VIEW吗

更重要的是,是否可以通过Intent.type以外的内容轻松定义所有媒体播放器?我相信类型应该是一个合适的MIME类型,小写,但我不确定在这个例子中使用什么


请温和一点:)

如果您确实打开了一个文件(或URL),并且注册了多个应用程序来处理它,我想您希望看到此选择器对话框?例如,您打开youtube URL并可以选择使用youtube播放器或浏览器

当我想(通过文件浏览器)打开图像时,系统会发送这种意图:

编辑:更正代码以获得工作(最小)解决方案


我不确定必须设置额外数据的哪些字段-没有找到相关文档。

要获得能够成功打开给定意图的应用程序,您将使用PackageManager。只需如上所述构造意图,然后使用此代码获取能够处理意图的应用程序

Intent myIntent = new Intent();
myIntent.setAction(Intent.ACTION_VIEW);
myIntent.addCategory("android.intent.category.LAUNCHER");
myIntent.setType("mp3");    

PackageManager manager = getPackageManager();
List<ResolveInfo> info = manager.queryIntentActivities(
    myIntent, PackageManager.MATCH_DEFAULT_ONLY);
Intent myIntent=newintent();
myIntent.setAction(Intent.ACTION\u视图);
myIntent.addCategory(“android.intent.category.LAUNCHER”);
myIntent.setType(“mp3”);
PackageManager=getPackageManager();
列表信息=manager.querytentActivities(
myIntent,PackageManager.MATCH_DEFAULT_ONLY);

这将为您提供有关可处理意图的程序的所有信息,包括图标和packagename。然后,您可以创建一个包含这些选项的对话框,并保存用户选择的选项。

点击此按钮以查看是否有人有答案(即使是部分答案)…我也遇到了类似的问题。我使用了以下解决方案来获取应用程序选择器:此解决方案还消除了构建自己对话框的需要。您是对的,我想查看选择器对话框。但是,我实际上不想打开该文件(实际上,我实际上不想有一个特定的文件)-我希望能够返回用于打开该文件的方法。基本上,我希望弹出一个文件类型选择器,然后能够保存(在我的应用程序中)所选应用程序的名称。这有意义吗?你说的“如上意图”是指@sstn的代码?在这种情况下,您的意思是使用包管理器代码而不是startActivity()?对。这样你就可以得到你需要的所有信息。让我把代码整理一下。看起来很棒!我想你没有合适的对话框代码吧?或者我只是创建我自己的“标准”一个?你只需要创建你自己的标准一个。我会选择一个警报对话框。检查这个
Intent myIntent = new Intent();
myIntent.setAction(Intent.ACTION_VIEW);
myIntent.addCategory("android.intent.category.LAUNCHER");
myIntent.setType("mp3");    

PackageManager manager = getPackageManager();
List<ResolveInfo> info = manager.queryIntentActivities(
    myIntent, PackageManager.MATCH_DEFAULT_ONLY);