Установить звук уведомления из папки Assets

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

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

пробовал

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

также пробовал так

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.access0(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 ответов


поместите УР 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");

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

notification.sound = Uri.parse("android.resource://my.package.name/raw/notification");

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


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


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

  1. скопировать файлы в каталог данных.
  2. все еще каталог данных не доступен для звука уведомления, поэтому я создаю пользовательский Content Provider чтобы поделиться аудиофайлом в read more, которые теперь находятся в папке данных.
  3. теперь во время создания уведомления я установил Uri файла к звуку уведомления.

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


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;
}