Установить звук уведомления из папки «Ресурсы» - PullRequest
22 голосов
/ 10 января 2012

Я прикрепляю звуковые файлы в папке ресурсов для воспроизведения звука в уведомлении, но не могу воспроизвести звук из папки активов.

У меня есть страница настройки, с которой пользователь может установить звук дляуведомление, а также пользователь может воспроизводить звук.Эта часть завершена.Я могу воспроизводить звук из папки ресурсов с помощью Media Player.Я могу использовать ту же логику во время создания Уведомления, но проблема может возникнуть, когда пользователь нажимает на Уведомление, потому что медиаплеер все еще воспроизводит звук.

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

но моя проблема все еще не решена.

Есть ли другой способ установить звук в уведомлении из каталога активов?

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

или любая другая идея?Пожалуйста, дайте мне подсказку.

Ответы [ 6 ]

35 голосов
/ 10 января 2012

поместите ваш mp3-файл в res->raw folder, попробуйте извлечь звуковой файл из raw folder.

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

OR

Uri path = Uri.parse("android.resource://com.androidbook.samplevideo/raw/myvideo");
8 голосов
/ 12 декабря 2012

Это отлично сработало для меня.Я нашел это в другом посте.

notification.sound = Uri.parse("android.resource://my.package.name/raw/notification");
5 голосов
/ 10 января 2012

ресурсы являются частными ресурсами для этого приложения, я думаю, вы не сможете установить их в качестве мелодии звонка, вам понадобится общедоступный файл, доступный для процесса мультимедиа для установки мелодии звонка. Вам нужно будет скопировать файл на SDCard, чтобы установить его в качестве мелодии звонка.

0 голосов
/ 22 ноября 2012

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;
}
0 голосов
/ 12 января 2012

Мне не удалось получить прямой доступ к аудиофайлу активов в уведомлении.Поэтому я следую этим шагам, и поэтому я могу воспроизводить звук в уведомлении

  1. Я копирую эти файлы в каталог данных.
  2. Каталог данных по-прежнему недоступен для звука уведомлений, поэтому я создаю пользовательский Content Provider для совместного использования аудиофайла в режиме чтения, который теперь находится в папке данных.создания уведомления Я установил Uri файла для звука уведомления.

Теперь, используя эти шаги, я могу установить собственный звук для уведомления.

0 голосов
/ 10 января 2012

Правильный путь для загрузки чего-либо из вашей папки ресурсов - file:///android_assets/relative_path_to_your_file.Обратите внимание на три слеша здесь.Хотя я не пытался настроить звук уведомления таким образом, я несколько раз успешно использовал его с WebView и ожидал, что он будет работать так же.

...