web-dev-qa-db-fra.com

Impossible de désactiver les vibrations de notification dans Android 8

J'essaie de désactiver les vibrations lors de l'affichage d'une notification.

Func:

public static Notification buildNotifForUploaderService(Context ctx, String title, String message) {

        Notification notification;
        NotificationCompat.Builder notificationBuilder;

        //If device is Android 8+
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
            //setting pattern to disable vibrating
            notificationChannel.setVibrationPattern(new long[]{0L});
            notificationBuilder = new NotificationCompat.Builder(ctx, CHANNEL_ID);
        } else {
            notificationBuilder = new NotificationCompat.Builder(ctx);
            notificationBuilder.setVibrate(new long[]{0L});
        }


        notificationBuilder
                .setContentTitle(title)
                .setContentText(message)
                .setLargeIcon(BitmapFactory.decodeResource(ctx.getResources(), R.mipmap.ic_launcher))
                .setSmallIcon(R.drawable.ic_backup_black_24dp);


        notification = notificationBuilder.build();

        return notification;
    }

J'appelle cela sur onCreate () d'une activité comme ceci:

Notification notification = NotificationHelper.buildNotifForUploaderService(this, "title", "message");
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    notificationManager.notify(1, notification);

C'est vibre encore . Je teste sur Android 8 appareil. J'ai aussi essayé 

 notificationChannel.setVibrationPattern(null);

ne fonctionne toujours pas.

J'ai 

<uses-permission Android:name="Android.permission.VIBRATE" />

Peu importe comment je définis le modèle de vibration , comme: 

new long[]{1000L, 500L, 300L, 1000L};

La vibration ne correspond pas à mes réglages . Onyl la vibration "deux courtes" par défaut se produit.

S'il vous plaît aider si vous pouvez, merci d'avance.

MODIFIER:

Comme Avijit Karmakar l'a mentionné, j'ai ajouté  

  notificationChannel.enableVibration(false);

Code complet maintenant:

public class MainActivity extends AppCompatActivity {

    final static String CHANNEL_ID = "MY_CHANNEL_ID";
    final static String CHANNEL_NAME = "MY_CHANNEL_NAME";


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Notification notification;
    NotificationCompat.Builder mBuilder;
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);


    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
        //Disabling vibration!
        notificationChannel.enableVibration(false);
        notificationManager.createNotificationChannel(notificationChannel);
        mBuilder = new NotificationCompat.Builder(this, CHANNEL_ID);

    } else {
        mBuilder = new NotificationCompat.Builder(this);
        mBuilder.setVibrate(new long[]{0L});
    }

    mBuilder.setContentTitle("title")
            .setContentText("message")
            .setSmallIcon(R.drawable.ic_Android_black_24dp);

    Bitmap bm = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
    mBuilder.setLargeIcon(bm);

    notification = mBuilder.build();
    notificationManager.notify(1, notification);
    }
}

Il vibre encore.

Je teste sur Xiaomi Mi A1 (Android 8.0)

Quelqu'un peut-il essayer ce code et m'aider avec les résultats?

5
Adam Varhegyi

Comme ceci répondre , faites:

mNotificationChannel.setVibrationPattern(new long[]{ 0 }); 
mNotificationChannel.enableVibration(true);

Important 1 : même si je règle le motif de vibration ci-dessus, mais que je donne la valeur false à enableVibration, il vibre. Donc, définissez enableVibration sur true !

Important 2 : comme ceci une autre réponse , le canal conserve ses paramètres initiaux, donc uninstall et installez à nouveau l'application pour appliquer les modifications!

J'espère que ça aide!

6
pcsantana

Utilisez NotificationManager.IMPORTANCE_LOW pour la valeur d'importance.

NotificationChannel notificationChannel = new NotificationChannel(
    CHANNEL_ID,
    CHANNEL_NAME,
    NotificationManager.IMPORTANCE_LOW
);
2
Mitsuaki Ishimoto

Ajoutez cette ligne à votre code pour arrêter les vibrations:

notificationChannel.enableVibration(false);
// Above line will disable your vibration for the notification

Retirez également le motif de vibration.

Donc, votre code mis à jour sera:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    NotificationChannel notificationChannel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
    //setting pattern to disable vibrating
    notificationChannel.enableVibration(false);

    notificationBuilder = new NotificationCompat.Builder(ctx, CHANNEL_ID);
} else {
    notificationBuilder = new NotificationCompat.Builder(ctx);
    notificationBuilder.setVibrate(new long[]{0L});
}
1
Avijit Karmakar

La réponse de Ahmadul Hoq qui peut être trouvée ici pourrait être utile.

En gros, vous devez activer la vibration et définir le modèle de vibration sur 0 L. Il semble y avoir un bogue sur Android Oreo qui entraîne cette solution de contournement. 

MODIFIER:

Si vous utilisez une notification récapitulative, cela pourrait entraîner une double vibration. J'ai eu le même comportement jusqu'à ce que j'ai découvert que la notification récapitulative qui avait été regroupée avec la notification entrante était à l'origine de ce problème. Vous pouvez créer un canal de notification supplémentaire pour la notification récapitulative et définir l’importance de celle-ci sur "faible". Cela signifie que le canal pour la notification récapitulative sera silencieux et que vous ne devriez avoir que du son et des vibrations provenant des notifications entrantes normales.

1
KraffMann