8

在我的一个 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

4 回答 4

5

的弃用文本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);
    }
}
于 2014-04-19T04:42:00.890 回答
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;
    }

当我将我的 nexus 与 Gingerbread 和 IceCreamSandwich 一起使用时,setVibrateSetting 工作正常,我使用 ICS 开发它,但是最近我发现它不适用于 Jelly Bean,并且 getVibrateSetting 也不起作用。期待更好的方法~

于 2013-01-19T16:25:35.327 回答
1

您可以使用以下代码行:

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

vibration.cancel();
于 2016-09-03T10:40:33.670 回答
-3

检查这个,我发现这是第一个谷歌结果。编码:

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

else{

// do nothing

}
于 2012-12-30T01:20:57.973 回答