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?

War es hilfreich?

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.:)

generasacodicetagpre.

Dieser Code funktioniert für mich.

generasacodicetagpre.

Dieser Code ist von der Benachrichtigungs-Compat-API-Klasse.Dies sollte funktionieren, alle diese Ihrem Builder hinzufügen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top