Установить уведомление из папки "Активы"
Я прикрепляю звуковые файлы в папке с ресурсами для воспроизведения звука в уведомлении, но я не могу воспроизвести звук из папки с ресурсами.
У меня есть страница настройки, с которой пользователь может установить звук для уведомления, а также пользователь может воспроизводить звук. Эта часть завершена. Я могу воспроизводить звук из папки с ресурсами, используя 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.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
или любая другая идея? Пожалуйста, дайте мне подсказку.
Ответы
Ответ 1
поместите ur 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");
Ответ 2
Это отлично сработало для меня. Я нашел его на другом посту.
notification.sound = Uri.parse("android.resource://my.package.name/raw/notification");
Ответ 3
активы - это частные ресурсы для этого приложения, я думаю, вы не сможете установить их в качестве мелодии звонка, вам понадобится публичный файл, доступный для медиа-процесса для установки мелодии звонка. Вам нужно будет скопировать файл на SDCard, чтобы установить его как мелодию звонка.
Ответ 4
Правильный путь загрузки чего-либо из вашей папки с ресурсами - file:///android_assets/relative_path_to_your_file
. Обратите внимание на три слэша. Хотя я и не пытался настроить звуковой сигнал уведомления, я использовал это с WebView с успехом несколько раз и ожидал, что он будет работать одинаково.
Ответ 5
Я не смог напрямую получить доступ к аудиофайлу активов в Уведомлении.
Поэтому я следую этим шагам и поэтому могу воспроизводить аудио в Notification
- Я копирую эти файлы в каталог данных.
- Диспетчер данных не доступен для звука Notification, поэтому я создаю пользовательский
Content Provider
для совместного использования аудиофайла в прочитанном далее файле, который теперь находится в папке с данными.
- Теперь, во время создания уведомления, я установил Uri файла в звук уведомления.
Теперь, используя эти шаги, я могу установить настраиваемый звук в Уведомление.
Ответ 6
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;
}