为什么 AudioManager.getRingerMode() return 只有 3 种模式?

Why AudioManager.getRingerMode() return only 3 modes?

根据 document,

getRingerMode() returns the current ringtone mode, one of RINGER_MODE_NORMAL, RINGER_MODE_SILENT, or RINGER_MODE_VIBRATE.

但是应该有4种模式吧?

声音打开,振动关闭:我怎么知道设置是这个?
声音开启,振动开启:RINGER_MODE_NORMAL
关闭声音,关闭振动:RINGER_MODE_SILENT
关闭声音,打开振动:RINGER_MODE_VIBRATE

请帮帮我。谢谢。

您可以将铃声方法设置为 RINGER_MODER_NORMAL(声音和振动开启)并将振动设置单独设置为 VIBRATE_SETTING_OFF(完全关闭振动)或 VIBRATE_SETTING_ONLY_SILENT.(振动仅在静音模式下)如下:

要关闭铃声振动:

setVibrateSetting (AudioManager.VIBRATE_TYPE_RINGER,AudioManager.VIBRATE_SETTING_OFF)

要关闭通知振动:

setVibrateSetting (AudioManager.VIBRATE_TYPE_NOTIFICATION,AudioManager.VIBRATE_SETTING_OFF)

更新:通过

获取当前音频模式的状态
   if(getRingerMode ()==AudioManager.RINGER_MODE_NORMAL)
    {    if((getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER))==AudioManager.AudioManager.VIBRATE_SETTING_OFF){    
        Log.d("Ringer Mode is":"ring with no vibraion")
        }
    else{
    Log.d("Ringer Mode is":"ring with vibraion")
    }

    else if(getRingerMode ()==AudioManager.RINGER_MODE_SILENT){

if((getVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER))==AudioManager.AudioManager.VIBRATE_SETTING_OFF){    
        Log.d("Ringer Mode is":"Silent with no vibraion")
        }
    else{
    Log.d("Ringer Mode is":"Silent with vibraion")
    }
    }
else{
 Log.d("Ringer Mode is":"Silent with vibraion")

}

Docs 中据说 RINGER_MODE_SILENT 模式将覆盖振动设置。

PS:根据 DOC get/setVibrateSetting()** 方法在 API 16级。 注意:我还没有测试代码。

if (Settings.System.getInt(context.getContentResolver(), "vibrate_when_ringing", 0) == 1)
{    
    return true;
}
else if (Settings.System.getInt(context.getContentResolver(), "vibrate_when_ringing", 0) == 0)
{
    return false;
}

我试过了,有用