tonos - poner musica como tono de mensaje en android
Establecer el sonido de notificación desde la carpeta Activos (6)
Estoy adjuntando los archivos de sonido en la carpeta de activos para reproducir el sonido en la notificación, pero no puedo reproducir el sonido desde la carpeta de activos.
Tengo una página de configuración desde la cual el usuario puede configurar el sonido para la notificación y también el usuario puede reproducir el sonido. Esta parte está completa. Puedo reproducir sonido desde la carpeta de activos usando Media Player. Puedo usar la misma lógica en el momento de la creación de la notificación, pero el problema puede ocurrir cuando el usuario hace clic en la notificación porque el reproductor de medios sigue reproduciendo el sonido.
Lo intenté
notification.sound = Uri.parse("file:///android_asset/Sound/Long/AlarmClock.mp3");
también intenté así
notification.sound = Uri.parse("android_asset/Sound/Long/AlarmClock.mp3");
pero mi problema aún no está resuelto.
¿Hay alguna otra forma de establecer el sonido en la notificación del directorio de activos?
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
o alguna otra idea? Por favor, dame una pista.
La ruta correcta para cargar algo desde la carpeta de activos es file:///android_assets/relative_path_to_your_file
. Tenga en cuenta las tres barras inclinadas aquí. Aunque no he intentado establecer un sonido de notificación de esta manera, lo he usado varias veces con WebView con éxito, y espero que funcione de la misma manera.
los recursos son recursos privados para esa aplicación, creo que no podrá configurarlos como tono de llamada, necesitará un archivo público al que pueda acceder el proceso de medios para establecer el tono de llamada. Deberá copiar el archivo en sdcard para configurarlo como tono de llamada.
No pude acceder directamente al archivo de audio de los activos a la Notificación. Así que sigo estos pasos y entonces puedo reproducir audio en la Notificación
- Copio esos archivos al directorio de datos.
- Todavía no se puede acceder al directorio de datos al sonido de notificación, así que creo un
Content Provider
personalizado para compartir el archivo de audio en la lista de lectura que ahora está en la carpeta de datos. - Ahora, en el momento de la creación de la notificación, había establecido el Uri del archivo en el sonido de notificación.
Ahora, usando estos pasos, puedo establecer un sonido personalizado para la Notificación.
ContentProvider es el camino a seguir. No creo que haya una necesidad de copiar archivos al directorio de datos como sugiere @Dharmendra. Puede acceder a la carpeta de activos directamente a través del 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;
}
Esto funcionó perfectamente para mí. Lo encontré en otra publicación.
notification.sound = Uri.parse("android.resource://my.package.name/raw/notification");
pon tu archivo mp3 en res->raw folder
, intenta buscar el archivo de sonido desde raw folder
formato.
Uri path = Uri.parse("android.resource://com.androidbook.samplevideo/" + R.raw.myvideo);
O
Uri path = Uri.parse("android.resource://com.androidbook.samplevideo/raw/myvideo");