Deaktivieren Sie die Vibration für eine Benachrichtigung
-
20-12-2019 - |
Frage
Ich schreibe eine App mit Benachrichtigung.In den Google-Entwicklerrichtlinien werden Entwickler aufgefordert, Einstellungen zum Anpassen der Benachrichtigungen bereitzustellen (Vibration deaktivieren, Benachrichtigungston festlegen ...), daher versuche ich, die Vibration für Benachrichtigungen zu deaktivieren, wenn der Benutzer dies so eingestellt hat.
ich benutze NotificationCompat.Builder
Um die Benachrichtigung zu erstellen, gehen Sie wie folgt vor:
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(Application.getContext())
.setDefaults(Notification.DEFAULT_ALL)
.setPriority(Notification.PRIORITY_MAX)
.setSmallIcon(R.drawable.ic_launcher)
.setLargeIcon(largeIconBitmap)
.setAutoCancel(true)
.setContentIntent(resultPendingIntent)
.setContentTitle(title)
.setContentText(content);
Ich habe verschiedene Möglichkeiten ausprobiert, Benachrichtigungen zu deaktivieren:
notificationBuilder.setVibrate(null);
notificationBuilder.setVibrate(new long[]{0l, 0l});
notificationBuilder.setDefaults(Notification.DEFAULT_ALL | ~Notification.DEFAULT_VIBRATE);
notificationBuilder.setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND);`
Ich habe auch versucht, die Benachrichtigung zu erstellen und Werte für das resultierende Objekt zu ändern:
Notification notification = notificationBuilder.build();
notification.vibrate = null;
Aber das Telefon vibriert immer noch, wenn die Benachrichtigung erscheint.
Wie kann ich die Vibration für Benachrichtigungen deaktivieren?
Lösung
Nach einer langen Trial-and-Error-Sitzung glaube ich, dass ich endlich verstanden habe, was falsch ist.
Das Problem liegt in dieser Anleitung notificationBuilder.setDefaults(Notification.DEFAULT_ALL)
.
Egal an welchen Parameter Sie übergeben notificationBuilder.setVibrate()
nach dem Einstellen DEFAULT_ALL
oder DEFAULT_VIBRATE
wird stillschweigend verworfen.Jemand bei Google muss sich entschieden haben, dem einen höheren Vorrang einzuräumen setDefaults
als zu setVibrate
.
So habe ich die Vibration für Benachrichtigungen in meiner App deaktiviert:
notificationBuilder.setDefaults(Notification.DEFAULT_LIGHT | Notification.DEFAULT_SOUND)
.setVibrate(new long[]{0L}); // Passing null here silently fails
Das funktioniert, aber es fühlt sich nicht richtig an, ein neues zu initialisieren long[]
Nur um die Vibration zu deaktivieren.
Andere Tipps
Sie sind nicht aufhören, da Sie generasAndicetAgcode verwenden>.
.setVibrate(null)
arbeitet für mich - und eine bessere Lösung als ein unnötiger langes [].
Ergebnis: Gerät vibriert nicht, und auch nicht in Logcat ruhrieren.:)
Dieser Code funktioniert für mich.
Dieser Code ist von der Benachrichtigungs-Compat-API-Klasse.Dies sollte funktionieren, alle diese Ihrem Builder hinzufügen.