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.
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");
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");
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.
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.
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
Content Provider
personnalisé pour partager le fichier audio dans le dossier de lecture, qui se trouve maintenant dans le dossier de données.Maintenant, en utilisant cette procédure, je peux définir un son personnalisé pour la notification.
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;
}