web-dev-qa-db-ja.com

通知のバイブレーションを無効にします

通知を使用してアプリを作成しています。 Google開発者ガイドラインでは、開発者が通知をカスタマイズするための設定(振動の無効化、通知音の設定...)を推奨しているため、ユーザーがそのように設定した場合は通知の振動を無効にしようとしています。

私は使っている NotificationCompat.Builder次のような通知を作成します。

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);

通知を無効にするさまざまな方法を試しました。

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);`

また、通知を作成し、結果のオブジェクトの値を変更しようとしました。

Notification notification = notificationBuilder.build();
notification.vibrate = null;

ただし、通知が表示されると電話は引き続き振動します。

通知のバイブレーションを無効にするにはどうすればよいですか?

26
nstCactus

長い試行錯誤のセッションの後、私は最終的に何が悪いのかを理解したと思います。

問題はこの命令notificationBuilder.setDefaults(Notification.DEFAULT_ALL)にあります。

_DEFAULT_ALL_または_DEFAULT_VIBRATE_を設定した後、notificationBuilder.setVibrate()にどのパラメーターを渡しても、黙って破棄されます。 Googleの誰かがsetDefaultsよりもsetVibrateに高い優先順位を与えることに決めたに違いありません。

これが私のアプリの通知のバイブレーションを無効にする方法です:

_notificationBuilder.setDefaults(Notification.DEFAULT_LIGHT | Notification.DEFAULT_SOUND)
                   .setVibrate(new long[]{0L}); // Passing null here silently fails
_

これは機能しますが、振動を無効にするためだけに新しい_long[]_を初期化するのは適切ではありません。

50
nstCactus

"setDefaults(Notification.DEFAULT_ALL)"を使用しているため停止しないので、振動と音を停止する必要がある場合、この行を削除するか、デフォルトの音を使用して振動を停止する必要がある場合、setDefaults(Notification.DEFAULT_SOUND) etc ...

3

.setVibrate(null)は私のために動作します-そして不必要なlong []を作成するよりも良い解決策です。

結果:デバイスは振動せず、Lo​​gCatでもゴロゴロしません。 :)

1
private void removeSoundAndVibration(Notification notification) {
        notification.sound = null;
        notification.vibrate = null;
        notification.defaults &= ~DEFAULT_SOUND;
        notification.defaults &= ~DEFAULT_VIBRATE;

このコードは、Notification Compat Api Classからのものです。これで機能するはずです。これらすべてをビルダーに追加してください。

0
Bipin
notification.vibrate = new long[] { -1 };

このコードは私のために機能します。

0
Houssin Boulla