23

我正在将声音文件附加到资产文件夹中以在通知中播放声音,但我无法从资产文件夹播放声音。

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

我试过

notification.sound = Uri.parse("file:///android_asset/Sound/Long/AlarmClock.mp3");

也试过这样

notification.sound = Uri.parse("android_asset/Sound/Long/AlarmClock.mp3");

但我的问题仍然没有解决。

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

日志猫

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

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

4

6 回答 6

37

把你的 mp3 文件放进去res->raw folder,试着从raw folder.

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

或者

Uri path = Uri.parse("android.resource://com.androidbook.samplevideo/raw/myvideo");
于 2012-01-10T09:56:51.000 回答
8

这对我来说非常有效。我在另一个帖子上找到了。

notification.sound = Uri.parse("android.resource://my.package.name/raw/notification");
于 2012-12-11T21:49:14.880 回答
4

资产是该应用程序的私有资源,我认为您将无法将它们设置为铃声,您将需要一个可由媒体进程访问的公共文件来设置铃声。您必须将文件复制到 sdcard 才能将其设置为铃声。

于 2012-01-10T10:03:28.927 回答
0

从资产文件夹加载内容的正确路径是file:///android_assets/relative_path_to_your_file. 注意这里的三个斜线。虽然我没有尝试以这种方式设置通知声音,但我已经多次成功地将它与 WebView 一起使用,并且希望它以相同的方式工作。

于 2012-01-10T09:56:40.370 回答
0

我无法直接访问通知的资产音频文件。所以我按照这个步骤,所以我可以在通知中播放音频

  1. 我将该文件复制到数据目录。
  2. 通知声音仍然无法访问数据目录,因此我创建了一个自定义Content Provider以在 read more 中共享音频文件,这些文件现在位于数据文件夹中。
  3. 现在在创建通知时,我已将文件的 Uri 设置为通知声音。

现在使用这些步骤,我可以为通知设置自定义声音。

于 2012-01-12T08:44:49.097 回答
0

ContentProvider 是要走的路。我认为不需要像@Dharmendra 建议的那样将文件复制到数据目录。您可以通过 ContentProvider 直接访问资产文件夹

public AssetFileDescriptor openAssetFile(Uri uri, String mode)
        throws FileNotFoundException {
    String filePart = Sound.getSoundFileName(uri);

    try {
        return getContext().getResources().getAssets().openFd(filePart + ".ogg");
    }catch(IOException e) {
        Log.d(TAG, "fail " + e.getMessage());

    }
    return null;
}
于 2012-11-22T05:16:07.427 回答