【发布时间】:2011-01-03 17:25:49
【问题描述】:
在我的应用程序中,我有一个菜单项,我想打开用户首选的媒体播放器,只对音频感兴趣。理想情况下,用户第一次选择此项目时,如果他们只安装了一个,它将选择手机上唯一的媒体播放器,或者如果他们有多个,则向他们展示一个列表。然后我会保存他们的选择,以便下次它会打开那个。
据我了解,Android 没有默认媒体播放器。我有原始的 Droid,它有一个媒体播放器,但我知道其他运营商使用他们自己的,或者用户可以卸载标准的。
我尝试了一些方法,但没有任何效果。
我尝试了这段代码,它应该获得支持该意图的软件包列表。它适用于“application/pdf”和“video/*”之类的东西。当我尝试使用“audio/*”时,我得到一个空列表,即使我同时安装了股票 Android 媒体播放器和 MixZing。也用“media/*”试过了,一无所获。
PackageManager packageManager = getPackageManager();
Intent testIntent = new Intent(Intent.ACTION_VIEW);
testIntent.setType("audio/*");
List list = packageManager.queryIntentActivities(testIntent, 0);
我已经看到这段代码可以使用默认播放器打开音频文件,但是我不想打开文件,我只想打开音频应用程序,就像用户从应用程序抽屉打开它一样.
Intent i = new Intent(Intent.ACTION_VIEW);
Uri u = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI,"1");
i.setData(u);
startActivity(i);
我能想到的唯一另一件事就是出去获取最受欢迎的媒体播放器的软件包名称并将它们硬编码并搜索手机以查看安装了哪些,但这似乎不像最好的方法。我不明白为什么第一段代码不起作用。可能没有为这些应用正确设置 Intent 过滤器,或者我使用了错误的代码或 MIME 类型。
【问题讨论】:
-
第二段代码完全符合我在启动活动时的要求。它为我提供了手机上可以处理意图的应用程序列表。我只是找不到自己生成该列表的方法,因此我可以操纵事物。我不想开始活动,只需获取操作系统用于生成该列表的任何数据。
-
好的,我想我有这个工作。当我得到它时,我会发布解决方案。
标签: android audio android-intent media media-player