我需要允许用户从他的媒体库中选择一些音频文件。
这是我正在尝试做的事情:
Intent tmpIntent = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
);
startActivityForResult(tmpIntent, 0);
但我得到错误:
08-20 17:44:35.444: E/AndroidRuntime(3773): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.PICK dat=content://media/external/audio/media }
为了安全起见,我也尝试了INTERNAL_CONTENT_URI
,但结果相似。
我怎样才能做到这一点?
UPD:顺便说一句,如果我尝试传递URI来获取图片(例如android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI
),那么它就可以了:打开图片打开对话框。
UPD2:刚在模拟器上试过这个 - 我的代码可以运行!但在两台设备上却没有(SE Xperia Neo和一些Acer)。但是,如果我尝试this answer中的第二个变体,那么我将获得所有现有文件管理器的菜单,以及“音乐选择”!但我需要写Intent才能打开这个“音乐选择”。
答案 0 :(得分:4)
好吧,我在LogCat中看到当我打开音乐选择对话框时会发生什么,我得到了我需要的东西。这段代码适合我:
Intent tmpIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
startActivityForResult(tmpIntent, 0);
如果我想获得通知声音,那么我需要额外添加,就像那样:
Intent tmpIntent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
tmpIntent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_NOTIFICATION);
startActivityForResult(tmpIntent, 0);