从Assets文件夹设置通知声音

Dha*_*dra 22 notifications android media-player android-assets android-resources

我将声音文件附加在资源文件夹中,以便在通知中播放声音,但我无法播放资源文件夹中的声音.

我有设置页面,用户可以从中设置通知声音,用户也可以播放声音.这部分完成了.我可以使用Media Player播放资源文件夹中的声音.我可以在通知创建时使用相同的逻辑,但是当用户点击通知时可能会发生问题,因为媒体播放器仍在播放声音.

我试过了

notification.sound = Uri.parse("file:///android_asset/Sound/Long/AlarmClock.mp3");
Run Code Online (Sandbox Code Playgroud)

也尝试过这样

notification.sound = Uri.parse("android_asset/Sound/Long/AlarmClock.mp3");
Run Code Online (Sandbox Code Playgroud)

但我的问题仍未解决.

有没有其他方法可以在资产目录中设置通知中的声音?

logcat的

01-10 09:57:01.509: ERROR/PlayerDriver(31): Command PLAYER_SET_DATA_SOURCE completed with an error or info PVMFErrNotSupported
01-10 09:57:01.509: ERROR/MediaPlayer(52): error (1, -4)
01-10 09:57:01.519: WARN/NotificationService(52): error loading sound for android_asset/Sound/Long/audio.mp3
01-10 09:57:01.519: WARN/NotificationService(52): java.io.IOException: Prepare failed.: status=0x1
01-10 09:57:01.519: WARN/NotificationService(52):     at android.media.MediaPlayer.prepare(Native Method)
01-10 09:57:01.519: WARN/NotificationService(52):     at android.media.AsyncPlayer.startSound(AsyncPlayer.java:64)
01-10 09:57:01.519: WARN/NotificationService(52):     at android.media.AsyncPlayer.access$200(AsyncPlayer.java:33)
01-10 09:57:01.519: WARN/NotificationService(52):     at android.media.AsyncPlayer$Thread.run(AsyncPlayer.java:99)
01-10 09:57:01.519: WARN/PlayerDriver(31): PVMFInfoErrorHandlingComplete
Run Code Online (Sandbox Code Playgroud)

或任何其他想法?请给我提示.

raj*_*ara 35

将你的mp3文件放入res->raw folder,尝试从中获取声音文件raw folder.

Uri path = Uri.parse("android.resource://com.androidbook.samplevideo/" + R.raw.myvideo);
Run Code Online (Sandbox Code Playgroud)

要么

Uri path = Uri.parse("android.resource://com.androidbook.samplevideo/raw/myvideo");
Run Code Online (Sandbox Code Playgroud)

  • 请注意,我发现声音必须是.mp3才能工作,而不是.ogg(就像我们其余的声音一样).并且,正如rajpara在上面所示,似乎还有必要不包括扩展名.所以我的声音文件,myproject/res/raw文件夹中的push.mp3,使用:android.resource://com.mycompany.myapp/raw/push (3认同)
  • 如果资源ID发生更改,则引用“ R.raw.myvideo”的第一种方法将停止工作,因为通知通道从不让您更改声音/路径。看到这个帖子:/sf/answers/3835754541/ (2认同)

小智 8

这对我很有用.我在另一篇文章中找到了它.

notification.sound = Uri.parse("android.resource://my.package.name/raw/notification");
Run Code Online (Sandbox Code Playgroud)