【问题标题】:How to enable and disable vibration mode programmatically如何以编程方式启用和禁用振动模式
【发布时间】:2015-03-23 10:50:44
【问题描述】:

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

我已经尝试了下面的代码,但它不起作用:

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

【问题讨论】:

标签: android performance android-layout android-intent android-activity


【解决方案1】:

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

 AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);

用于设置静音模式:

audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);

普通模式:

audioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);

【讨论】:

    【解决方案2】:

    首先在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();
     }
    

    振动模式 公共抽象无效振动(long []模式,int重复) 振动模式只不过是一系列以毫秒为单位打开和关闭振动器的持续时间。第一个值表示打开振动器之前要等待的毫秒数。下一个值表示在关闭振动器之前保持振动器开启的毫秒数。后续值,在 ON 和 OFF 之间交替。

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

    如果您觉得没有重复,只需将 -1 传递给“重复”。要重复模式,只需从您想要开始的地方传递索引。我想从第 0 个索引开始,因此我将 0 传递给“重复”。

    vibrator.vibrate(pattern, 0);
    

    【讨论】:

    • 这只是启动振动,我们不需要启动振动,只需要启用和禁用它。
    【解决方案3】:
     myAudioManager.setVibrateSetting();
    

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

    你可以用这个:

    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT)
    

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

    RINGER_MODE_VIBRATE:静音和振动。

    RINGER_MODE_NORMAL:会听得见,并可能根据用户设置振动。

    【讨论】:

      【解决方案4】:
      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);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-03
        • 1970-01-01
        • 1970-01-01
        • 2014-03-05
        • 1970-01-01
        相关资源
        最近更新 更多