Android 通过URI播放通知音频
我有通知声音的URI,比如Android 通过URI播放通知音频,android,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
,但是SoundPool
不适用于URI,它只适用于文件路径的apk资源
有没有办法从URI获取媒体文件路径?我尝试了Uri.getPath()
,它返回/internal/audio/media/122
,但这不是有效的文件路径,当然SoundPool
也不适用于此类修补程序
实际上,通知的真正路径是/system/media/audio/notifications/allegro.ogg
,我看不出有什么办法像content://media/internal/audio/media/122
或者我应该为此使用MediaPlayer
?我测试过,它可以工作:
MediaPlayer mp = MediaPlayer.create(this, "content://media/internal/audio/media/122");
mp.start();
我很困惑,因为MediaPlayer
似乎太重了,不能只播放短的通知声音,所以我更喜欢使用SoundPool
如果我对MediaPlayer的重量有错误,请告诉我,并建议通过其URI播放通知声音的正确方法。尝试以下方法以获得完整路径:
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快得多,也轻得多。好吧,我找到了通过URI播放音频的最简单方法:
RingtoneManager.getRingtone(this, Uri.parse("content://media/internal/audio/media/122")).play();
我认为这是我所能达到的最好成绩。受到德米特里答案的启发
一条线就可以解决这个问题。谢谢,并建议,如果“SoundPool用于短应用程序音频资源”,我是否应该改用MediaPlayer?@DmitryFlank已更新。如果您的声音很短,请坚持使用声音池。如果它很长并且声音池工作不好,那么您需要切换到MediaPlayer。这就是我要做的。不幸的是,你的方式不起作用:通知的真正路径是
/system/media/audio/notifications/allegro.ogg
,我看不到从URI像content://media/internal/audio/media/122
。对不起。我认为/system/media/internal/audio/media/122
可以工作。您可能想尝试中的第一种方法。听起来很有希望。不管怎样,问题现在似乎已经解决了(看看我自己对这个问题的回答)。谢谢你的帮助。谢谢你,这带来了一些启示,我解决了这个问题。如果你感兴趣,请查看我自己对这个问题的答案。是的,欢迎!!!很乐意帮忙。:)缺点是铃声在内部使用MediaPlayer,但并没有提供一种方便的方式在事后发布。