如何以编程方式启用和禁用振动模式

How to enable and disable vibration mode programmatically

我需要在用户关闭和打开开关按钮时启用和禁用手机振动模式。

我试过下面的代码,但它不起作用:

AudioManager myAudioManager;
myAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

Toast.makeText(this, "in setting "+(myAudioManager.getMode()==AudioManager.RINGER_MODE_VIBRATE),1).show();

if(myAudioManager.getMode()==AudioManager.RINGER_MODE_VIBRATE) {
    //myAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
    myAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_OFF);
}
else
{
    //myAudioManager.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
    myAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, AudioManager.VIBRATE_SETTING_ON);
}

首先在AndroidManifest.xml

中使用这个权限
<uses-permission android:name="android.permission.VIBRATE"/>

现在

public void startVibrate(View v) {
  long pattern[] = { 0, 100, 200, 300, 400 };
  vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
  vibrator.vibrate(pattern, 0);
 }

  public void stopVibrate(View v) {
  vibrator.cancel();
 }

振动模式 public abstract void vibrate (long[] pattern, int repeat) 振动模式只不过是一系列以毫秒为单位打开和关闭振动器的持续时间。第一个值表示在打开振动器之前等待的毫秒数。下一个值表示振动器在关闭之前保持开启的毫秒数。后续值,在 ON 和 OFF 之间交替。

long pattern[]={0,100,200,300,400};

如果觉得没有重复,直接给'repeat'传-1即可。要重复模式,只需从你想开始的地方传递索引。我想从第 0 个索引开始,因此我将 0 传递给 'repeat'.

vibrator.vibrate(pattern, 0);

我们可以使用 AudioManager 以编程方式启用和禁用静音模式:

 AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);

用于设置静音模式:

audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

普通模式:

audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
 myAudioManager.setVibrateSetting();

此方法已在 API 级别 16 中弃用。

你可以用这个:

audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT)

RINGER_MODE_SILENT : 将静音并且不会振动。

RINGER_MODE_VIBRATE: 将静音并振动。

RINGER_MODE_NORMAL: 会发出声音,并可能根据用户设置振动。

Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// Vibrate for 500 milliseconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    v.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE));
} else {
    //deprecated in API 26 
    v.vibrate(500);
}