20

Estoy adjuntando los archivos de sonido en la carpeta assets para reproducir el sonido en la notificación, pero no puedo reproducir el sonido desde la carpeta assets.Fijar sonido de notificación de la carpeta Assets

Tengo la 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.

me trataron

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

también trataron como esto

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

pero mi problema todavía no está resuelto.

¿Hay alguna otra manera de establecer el sonido en la notificación desde el 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 cualquier otra idea? Por favor, dame una pista.

+0

¿Qué está pasando exactamente? –

+0

He actualizado mi excepción – Dharmendra

Respuesta

30

pon tu archivo mp3 en res->raw folder, intenta buscar el archivo de sonido desde raw folder.

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

O

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

echa un vistazo a estos enlaces que he encontrado interesante [link] (http://www.anddev.org/multimedia-problems-f28/how-to-solve-pvmferrnotsupported-error-while-playing-sound-t17270.html) – rajpara

+0

Sí esta es una gran idea para crear contenido proveedor para acceder a los archivos internos – Dharmendra

+3

Nota, encontré que el sonido tenía que ser .mp3 para funcionar, no .ogg (como el resto de nuestros sonidos). Y, como rajpara mostró anteriormente, también parecía necesario no incluir la extensión Así que mi archivo de sonido, push.mp3 en la carpeta myproject/res/raw, trabajó con: android.resource: //com.mycompany.myapp/raw/push – leontx

0

La ruta correcta para cargar algo desde su carpeta de activos es file:///android_assets/relative_path_to_your_file. Tenga en cuenta tres barras diagonales 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.

+0

Ok, déjame probar con tres barras – Dharmendra

+0

No funciona después de poner 3 barras :( – Dharmendra

+0

¿Recibió el mismo error que en la publicación original? – Bendik

5

activos son recursos privados a esa aplicación, creo que no será capaz de establecer como tono de llamada, necesitará un archivo público, que es accesible por el proceso de comunicación para establecer el tono de llamada Deberá copiar el archivo en sdcard para configurarlo como tono de llamada.

+0

Sí, creo que tienes razón. para acceder a los recursos privados tendré que usar el proveedor de contenido. – Dharmendra

0

No pude acceder directamente al archivo de audio de activos a la Notificación. Así que seguir los siguientes pasos y así soy capaz de reproducir audio en la Notificación

  1. copio que los archivos en el directorio de datos.
  2. El directorio de datos fijos no está accesible para el sonido de notificación, por lo 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.
  3. Ahora, en el momento de la creación de la notificación, establecí el Uri del archivo en el sonido de notificación.

Ahora, mediante estos pasos, puedo configurar un sonido personalizado para la Notificación.

0

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 recursos directamente a través de la 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

y cómo puedo obtener el tono de este AssetFileDescriptor? – wutzebaer

+0

@wutzebaer Puede dar a NotificationCompat.Builder un URI de un sonido para reproducir con la notificación. openAssetFile en su proveedor de contenidos se da este URI y devuelve el AssetFileDescriptor a la notificación de jugar http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html – Chiatar

6

Esto funcionó perfectamente para mí. Lo encontré en otra publicación.

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

Su Uri indica que está accediendo a la carpeta de recursos en lugar de a los activos. Está haciendo referencia a un archivo de la carpeta de filas dentro de sus recursos. – Dharmendra

+0

De hecho, es bueno que coloquemos un archivo de sonido en la carpeta de filas y lo refiramos. – Dharmendra

Cuestiones relacionadas