2016-03-02 2 views
0

Dépend de NotificationListenerService et de sa méthode cancelNotification, je peux annuler toute notification provenant d'une application spécifique basée sur le nom du paquet.comment désactiver la vibration de certaines applications dans Android par programme

Mais cette méthode ne semble pas arrêter la vibration de cette notification lorsque j'utilise cancelNotification! Y at-il un moyen de désactiver la vibration des notifications à venir? Ou généralement, puis-je arrêter la vibration d'applications spécifiques?

J'ai essayé de convertir le téléphone en mode silencieux, mais c'est une opération trop lente car la notification sera annulée, puis la vibration commencera, puis le téléphone sera en mode silencieux!

AudioManager aManager=(AudioManager)getSystemService(AUDIO_SERVICE); 
    aManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
    if (android.os.Build.VERSION.SDK_INT >= 18 && android.os.Build.VERSION.SDK_INT <= 20) { 
     cancelNotification(sbn.getPackageName(), sbn.getTag(), sbn.getId()); 
    } else if (android.os.Build.VERSION.SDK_INT >= 21) { 
     cancelNotification(sbn.getKey()); 
    } 

Répondre

0

Le texte pour setVibrateSetting deprecation() dit:

Cette méthode ne doit être utilisé par les applications qui remplacent la gestion de la plate-forme à l'échelle des paramètres audio ou l'application principale de la téléphonie. D'après ce que je comprends, il n'y a pas d'autre option pour activer ou désactiver globalement les vibrations, donc si vous avez une application comme un gestionnaire de profil d'anneau, vous avez probablement besoin de l'utiliser. À mon humble avis, Google a utilisé la dépréciation ici de façon inappropriée.

J'utilise la classe suivante pour cacher la dévalorisation dans une classe « compat »:

@SuppressWarnings("deprecation") 
class AudioManagerCompat { 
    final static int VIBRATE_TYPE_RINGER = AudioManager.VIBRATE_TYPE_RINGER; 
    final static int VIBRATE_TYPE_NOTIFICATION = AudioManager.VIBRATE_TYPE_NOTIFICATION; 
    final static int VIBRATE_SETTING_ON = AudioManager.VIBRATE_SETTING_ON; 
    final static int VIBRATE_SETTING_OFF = AudioManager.VIBRATE_SETTING_OFF; 
    final static int VIBRATE_SETTING_ONLY_SILENT = AudioManager.VIBRATE_SETTING_ONLY_SILENT; 

    static int getVibrateSetting(AudioManager am, int vibrateType) { 
     return am.getVibrateSetting(vibrateType); 
    } 

    static void setVibrateSetting(AudioManager am, int vibrateType, int vibrateSetting) { 
     am.setVibrateSetting(vibrateType, vibrateSetting); 
    } 
} 
+0

Je l'ai vu ce code avant, mais je ne comprends pas comment puis-je utiliser? J'ai essayé d'utiliser ceci mais ne fonctionne pas 'aManager.setVibrateSetting (AudioManager.VIBRATE_TYPE_NOTIFICATION, AudioManager.VIBRATE_SETTING_OFF);' – Mohammad