通过URI播放通知音频

时间:2012-08-21 06:40:58

标签: android

我有通知声音的URI,如content://media/internal/audio/media/122,但SoundPool不适用于URI,它只适用于文件路径的apk资源。

有没有办法从URI获取媒体文件路径?我尝试了Uri.getPath(),它返回/internal/audio/media/122,但这不是有效的文件路径,当然SoundPool不适用于此类补丁。

实际上通知的真实路径是/system/media/audio/notifications/allegro.ogg,我认为无法从content://media/internal/audio/media/122

这样的URI中获取通知

或者我应该使用MediaPlayer吗?我测试过,它有效:

           MediaPlayer mp = MediaPlayer.create(this, "content://media/internal/audio/media/122");
           mp.start();

我很困惑因为MediaPlayer似乎太沉重而不能播放简短的通知声音,所以我更愿意使用SoundPool

请告诉我MediaPlayer重量是否错误,并建议通过其URI播放通知声音的正确方法。

3 个答案:

答案 0 :(得分:20)

好吧,我通过URI获得了播放音频的最简单方法:

RingtoneManager.getRingtone(this, Uri.parse("content://media/internal/audio/media/122")).play();

我认为这是我能做到的最好的事情。

答案 1 :(得分:0)

试试这个以获得完整路径:

String path = Environment.getRootDirectory().getAbsolutePath(); //Will return "/system"
path = path + Uri.getPath().subString(9); //To cut "content:/" from the Uri path.
//Then pass this "path" to your SoundPool

你是对的。与用于音乐和视频的MediaPlayer不同,SoundPool旨在用于短应用音频资源,如通知。它比MediaPlayer更快更轻。

答案 2 :(得分:0)

受到德米特里答案的启发。

只需一行即可解决问题。

RingtoneManager.getRingtone(this, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)).play();