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