Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过URI播放通知音频_Android - Fatal编程技术网

Android 通过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,我看不

我有通知声音的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

或者我应该为此使用
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,但并没有提供一种方便的方式在事后发布。