按URI播放通知音频



我有通知声音的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播放通知声音的正确方式。

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

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

我认为这是我能取得的最好成绩。

尝试此操作以获得完整路径:

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更快、更轻。

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

一行就可以解决问题。🙂

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

最新更新