Как отключить вибрацию уведомлений на андроиде

Я разрабатываю приложение, которое обрабатывает звук и вибрацию уведомлений приложений. Я слушаю уведомления, используя NotificationListenerService. Я могу включить или выключить звук уведомления, используя AudioManager, следующим образом:

// It turns off notification's sound
myAudioManager.setStreamMute(AudioManager.STREAM_NOTIFICATION, true); 

// It turns on notification's sound
myAudioManager.setStreamMute(AudioManager.STREAM_NOTIFICATION, false); 

Я также пытался включить или выключить вибрацию уведомлений с помощью следующего кода, но это не сработало на моем телефоне с Android KitKat 4.4.4.

// to turn off notification's vibration
myAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF);

// to turn on notification's vibration
myAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_ON);



Ответы (2)


Вот что я сделал. В моем NotificationListenerService я отменяю исходное уведомление, отключаю его вибрацию и снова отправляю. Такой код должен работать:

Integer key = 1;

@Override
public void onNotificationPosted(StatusBarNotification sbn) {
    Notification n = sbn.getNotification();
    if (doINeedToDisableVibration(sbn)) {
        cancelNotification(sbn.getKey());
        n.defaults &= ~Notification.DEFAULT_VIBRATE;
        n.vibrate = null;
        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            synchronized(key) {
                nm.notify(key++, n);
            }
    }
}

В doINeedToDisableVibration(sbn) либо убедитесь, что в уведомлении включена вибрация, либо проверьте, что sbn.packageName НЕ совпадает с именем вашего собственного пакета, иначе вы рискуете создать бесконечный цикл.

Я не уверен, что это будет работать со всеми уведомлениями. Но это работало с уведомлениями MMS на моем HTC One A9 с 6.0.

person Alexander Pruss    schedule 16.07.2016

setVibrateSetting API устарел в API 16. Согласно сайту разработчиков Android,

Приложения должны поддерживать свою собственную политику вибрации на основе текущего режима звонка, который можно запросить с помощью getRingerMode().

Итак, вы пытаетесь в режиме звонка включить/отключить вибрацию.

 AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);

для установки беззвучного режима:

audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

Для обычного режима:

audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

Для режима вибрации звонка:

audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
person Raghu Nagaraju    schedule 03.03.2016
comment
Это повлияет на то, что телефон будет находиться в беззвучном режиме, обычном режиме и режиме вибрации. Мне нужно обрабатывать только уведомления. - person zeeali; 03.03.2016
comment
вы можете попробовать это, stackoverflow.com/questions/31235609/ На данный момент я не получаю никакого другого решения. Установить вибрацию уведомлений устарело из API 16 - person Raghu Nagaraju; 03.03.2016
comment
Хотя это не решает мою проблему, спасибо за ваше время! - person zeeali; 03.03.2016
comment
Ссылка полезная! - person zeeali; 21.04.2016