如何以编程方式禁用Android中特定应用程序的振动

时间:2016-03-02 12:07:25

标签: android vibration

取决于NotificationListenerService及其方法cancelNotification,我可以根据包名取消任何来自特定应用的通知。

但是当我使用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());
    }

1 个答案:

答案 0 :(得分: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);
    }
}