以编程方式启用和禁用android中的振动

时间:2012-12-30 00:48:12

标签: android

在我的一个Android应用程序中,我需要完全启用或禁用振动,无论模式如何(即无声或一般或响亮)。

我目前在已弃用的函数的帮助下使用以下代码 setVibrateSetting

//用于打开振动模式

audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
            AudioManager.VIBRATE_SETTING_ON);
audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,
            AudioManager.VIBRATE_SETTING_ON);

//关闭振动模式

audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER,
            AudioManager.VIBRATE_SETTING_OFF);
audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_NOTIFICATION,
            AudioManager.VIBRATE_SETTING_OFF);

但我想知道是否有明确的方法来做到这一点。

欢迎提出建议:)

此致 Jujare

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

这是我的代码

switch (position) {
    case 0:
        audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
        break;
    case 1:
        audioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
        break;
    case 2:
        audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
        audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, 
                AudioManager.VIBRATE_SETTING_OFF);
        break;
    case 3:
        audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
        audioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, 
                AudioManager.VIBRATE_SETTING_ON);
        break;
    }

setVibrateSetting在我使用带有Gingerbread和IceCreamSandwich的nexus时工作正常,我使用ICS开发它,但是最近我发现它不适用于Jelly Bean,并且getVibrateSetting也不起作用。等待更好的方式〜

答案 2 :(得分:1)

您可以使用以下代码行:

Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);

vibration.cancel();

答案 3 :(得分:-2)

检查this,我发现这是第一个谷歌搜索结果。代码:

if(isVibrate){
Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);  
     vib.vibrate(500);
      Toast.makeText(this, "vib started", Toast.LENGTH_LONG).show();
}

else{

// do nothing

}