2016-03-02 52 views
0

取决于NotificationListenerService及其方法cancelNotification,我可以根据软件包名称取消来自特定应用程序的任何通知。如何在Android中以编程方式禁用特定应用程序的振动

但是,当我使用cancelNotification时,此方法似乎不会阻止该通知的振动!有什么办法可以禁用即将来临的通知的振动吗?或者一般来说,我可以阻止特定应用程序的振动吗?

我试图将手机转换为静音模式,但这样操作太慢,因为通知将被取消,然后振动将开始,然后手机将处于静音模式!

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

回答

0

为setVibrateSetting弃用文本()说:

此方法只应由替代的音频设置或主电话应用的平台范围管理应用程序中使用。 据我所知,没有其他的选择来全局启用或禁用振动,所以如果你有一个应用程序,如戒指配置文件管理器,你可能需要使用它。

恕我直言,谷歌在这里使用不适当的弃用。

我用下面的类来隐藏弃用在一个“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

我以前见过这个代码,但我不明白我怎么可以使用它?我试图使用这个,但不工作'aManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,AudioManager.VIBRATE_SETTING_OFF);' – Mohammad

相关问题