web-dev-qa-db-fra.com

Android notification setSound ne fonctionne pas

Dans mon Cordova hybride Android ciblant l'API 23+, je veux utiliser un son personnalisé pour les notifications. À cette fin, j'ai fait ce qui suit

  • Dans plugin.xml fichier pour le seul plugin personnalisé que j'utilise dans l'application que je déclare <resource-file src="src/Android/res/unysound.mp3" target="res/raw/mysound.mp3" />'.

Ouverture de l'APK en tant qu'archive Zip Je constate que le fichier mp3 s'est en fait retrouvé dans `res/raw/mysound.mp3 '. - Lors de la création de la notification, je fais ce qui suit

    Notification notification = new Notification.Builder(context)
    .setDefaults(0) //turns off ALL defaults
    .setVibrate(vibrate)  /sets to vibrate
    ....
    .setSound(uri).build();

Uri uri = Uri.parse("Android.resource://" + ctxt.getPackageName() + "/raw/mysound.mp3");

Cela semble être la recette indiquée dans un certain nombre d'articles que je trouve sur Google et même dans d'autres discussions sur SO. Et pourtant, lorsque j'émets une notification, je n'entends pas le son attendu. Que pourrais-je faire de mal?


La réponse ci-dessous n'aide pas, car dans le cadre de mon application hybride Cordova avec un plugin personnalisé tentant de créer l'APK, une erreur du type class R not known/found...

14
DroidOS

le code ci-dessous vous aidera:

String CHANNEL_ID="1234";

Uri soundUri = Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + "://"+ getApplicationContext().getPackageName() + "/" + R.raw.mysound);

NotificationManager mNotificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);

Pour API 26+, vous devez mettre du code supplémentaire comme ci-dessous:

NotificationChannel mChannel;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            mChannel = new NotificationChannel(CHANNEL_ID, Utils.CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
            mChannel.setLightColor(Color.GRAY);
            mChannel.enableLights(true);
            mChannel.setDescription(Utils.CHANNEL_SIREN_DESCRIPTION);
            AudioAttributes audioAttributes = new AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_NOTIFICATION)
                    .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                    .build();
            mChannel.setSound(soundUri, audioAttributes);

            if (mNotificationManager != null) {
                mNotificationManager.createNotificationChannel( mChannel );
            }
    }

Code général:

 NotificationCompat.Builder status = new NotificationCompat.Builder(getApplicationContext(),CHANNEL_ID);     
                      status.setAutoCancel(true)
                            .setWhen(System.currentTimeMillis())
                            .setSmallIcon(R.drawable.logo)
                            //.setOnlyAlertOnce(true)
                            .setContentTitle(getString(R.string.app_name))
                            .setContentText(messageBody)
                            .setVibrate(new long[]{0, 500, 1000})
                            .setDefaults(Notification.DEFAULT_LIGHTS )
                            .setSound(Uri.parse(ContentResolver.SCHEME_Android_RESOURCE+ "://" +mContext.getPackageName()+"/"+R.raw.Apple_ring))
                            .setContentIntent(pendingIntent)
                            .setContent(views);

                    mNotificationManager.notify(major_id, status.build());

où mysound est ma sonnerie qui est placée dans le dossier res/raw.

Note: vous devez seulement mettre le nom de la sonnerie sans extension comme raw/mysound

14
Ketan Patel

Pour API 26+, vous devez définir le son sur le canal de notification:

Uri soundUri = Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + "://"+ getApplicationContext().getPackageName() + "/" + R.raw.siren);
NotificationManager mNotificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
    NotificationChannel mChannel;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            mChannel = new NotificationChannel(Utils.CHANNEL_SIREN_ID, Utils.CHANNEL_SIREN_NAME, NotificationManager.IMPORTANCE_HIGH);
            mChannel.setLightColor(Color.GRAY);
            mChannel.enableLights(true);
            mChannel.setDescription(Utils.CHANNEL_SIREN_DESCRIPTION);
            AudioAttributes audioAttributes = new AudioAttributes.Builder()
                    .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                    .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                    .build();
            mChannel.setSound(soundUri, audioAttributes);

            if (mNotificationManager != null) {
                mNotificationManager.createNotificationChannel( mChannel );
            }
    }

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, Utils.CHANNEL_SIREN_ID)
            .setSmallIcon(R.drawable.ic_stat_maps_local_library)
            .setLargeIcon(BitmapFactory.decodeResource(getApplicationContext().getResources(), R.mipmap.ic_launcher))
            .setTicker(title)
            .setContentTitle(contentTitle)
            .setContentText(contentText)
            .setAutoCancel(true)
            .setLights(0xff0000ff, 300, 1000) // blue color
            .setWhen(System.currentTimeMillis())
            .setPriority(NotificationCompat.PRIORITY_DEFAULT);

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
            mBuilder.setSound(soundUri);
    }

    int NOTIFICATION_ID = 1; // Causes to update the same notification over and over again.
    if (mNotificationManager != null) {
        mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
    }
8
Dimitar Darazhanski
  1. Essayez d'effacer les données (ou une nouvelle installation)
  2. Réessayer

Les paramètres sont définis la première fois que vous créez le canal, puis ne sont pas modifiés, sauf si vous le faites manuellement par une nouvelle installation ou l'effacement des données.

Pour plus d'informations à ce sujet, lisez la première réponse ici: La notification Android Oreo continue de faire du son même si je ne règle pas le son. Sur la version plus ancienne, fonctionne parfaitement

6
Siddharth Jaswal

vous pouvez appeler cette méthode lors de la gestion des notifications

    public void playNotificationSound() {
    try {
        Uri alarmSound = Uri.parse(ContentResolver.SCHEME_Android_RESOURCE
                + "://" + mContext.getPackageName() + "/raw/notification");
        Ringtone r = RingtoneManager.getRingtone(mContext, alarmSound);
        r.play();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
5
Uma Achanta

Utilisez-le pour régler le son

Uri defaultSoundUri = Uri.parse(ContentResolver.SCHEME_Android_RESOURCE + "://" + mContext.getPackageName() + "/raw/mysound");


NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(mContext)
                        .setContentIntent(mainPIntent)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), R.mipmap.ic_launcher))
                        .setContentTitle("" + title)
                        .setAutoCancel(true)
                        .setSound(defaultSoundUri)
                        .setContentText("" + body);

        NotificationManager mNotificationManager =
                (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(title, NOTIFICATION_ID, mBuilder.build());
1
Ashish Pardhiye

Vous accédez au son dans un sous-dossier dans les ressources

changer la source de votre uri en

Uri uri = Uri.parse("Android.resource://" + context.getPackageName() + "/" + R.raw.siren);

Pour le son par défaut, utilisez:

notification.defaults |= Notification.DEFAULT_SOUND;
0
Lucem

Je ne suis pas sûr mais je pense que le problème est que vous faites le mauvais chemin "/raw/mysound.mp3:

Uri uri = Uri.parse("Android.resource://" + ctxt.getPackageName() + "/raw/mysound.mp3");

Ajoutez d'abord l'autorisation dans le manifeste: uses-permission Android:name="Android.permission.VIBRATE" /> alors vous pouvez définir le son par défaut comme: -

Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
mBuilder.setSound(alarmSound);

et pour les vibrations:

mBuilder.setVibrate(new long[] { 1000, 1000});

pour un son personnalisé, placez le fichier mp3 sur ce chemin: Res\raw\sound.mp3 et alors

Notification notification = builder.build();
 notification.sound = Uri.parse("Android.resource://"
        + context.getPackageName() + "/" + R.raw.sound);
0
aj0822ArpitJoshi
 Notification.Builder builder = new Notification.Builder(context);
    builder.setContentTitle(mTitle);
    builder.setContentText(mContentText);
    builder.setSmallIcon(R.mipmap.ic_launcher);

    builder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI);
    builder.setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 });
    builder.setDefaults(Notification.DEFAULT_ALL);

Utilisez-le pour travailler avec le son, j'espère que cela résoudra votre problème, Cheers!

0
Aleesha Kanwal