2016-03-02 48 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

相關問題