web-dev-qa-db-fra.com

Définir le son de notification à partir du dossier Actifs

Je joins les fichiers audio dans le dossier des ressources pour lire le son dans la notification, mais je ne parviens pas à lire le son à partir du dossier des ressources.

J'ai la page de configuration à partir de laquelle l'utilisateur peut définir le son pour la notification et également l'utilisateur peut jouer le son. Cette partie est terminée. Je suis en mesure de lire le son du dossier des ressources à l'aide de Media Player. Je peux utiliser la même logique au moment de la création de la notification, mais un problème peut survenir lorsque l'utilisateur clique sur la notification car le lecteur multimédia lit toujours le son.

J'ai essayé

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

aussi essayé comme ça

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

mais mon problème n'est toujours pas résolu.

Existe-t-il un autre moyen de définir le son dans la notification à partir du répertoire des actifs?

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

ou une autre idée? S'il vous plaît donnez-moi un indice.

20
Dharmendra

mettez votre fichier mp3 dans res->raw folder, essayez d’extraire le fichier son de raw folder.

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

OU

Uri path = Uri.parse("Android.resource://com.androidbook.samplevideo/raw/myvideo");
33
rajpara

Cela a parfaitement fonctionné pour moi. Je l'ai trouvé sur un autre post.

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

les actifs sont des ressources privées pour cette application, je pense que vous ne pourrez pas les définir comme sonnerie, vous aurez besoin d'un fichier public accessible par le processus multimédia pour définir la sonnerie. Vous devrez copier le fichier sur sdcard pour le définir comme sonnerie.

5
nandeesh

Le chemin correct pour charger quelque chose à partir de votre dossier de ressources est file:///Android_assets/relative_path_to_your_file. Notez le trois barres obliques ici. Bien que je n'aie pas essayé de définir un son de notification de cette manière, je l'ai utilisé plusieurs fois avec une WebView et je m'attendais à ce qu'il fonctionne de la même manière.

0
Bendik

Je n'ai pas pu accéder directement au fichier audio des ressources de la notification. Donc, je suis cette étape et je suis capable de jouer de l'audio dans la notification

  1. Je copie ces fichiers dans le répertoire de données.
  2. Le répertoire de données fixes n'est pas accessible au son de notification. Je crée donc un Content Provider personnalisé pour partager le fichier audio dans le dossier de lecture, qui se trouve maintenant dans le dossier de données.
  3. Maintenant, au moment de la création de la notification, j'avais défini l'URI du fichier sur le son de notification.

Maintenant, en utilisant cette procédure, je peux définir un son personnalisé pour la notification.

0
Dharmendra

ContentProvider est la voie à suivre. Je ne pense pas qu'il soit nécessaire de copier des fichiers dans le répertoire de données, comme le suggère @Dharmendra. Vous pouvez accéder au dossier d’actif directement via 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
Chiatar