如何检测android手机铃声并以编程方式振动?

时间:2014-11-13 03:14:52

标签: android volume

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

switch (am.getRingerMode()) {
    case AudioManager.RINGER_MODE_SILENT:
        Log.i("MyApp","Silent mode");
        break;
    case AudioManager.RINGER_MODE_VIBRATE:
        Log.i("MyApp","Vibrate mode");
        break;
    case AudioManager.RINGER_MODE_NORMAL:
        Log.i("MyApp","Normal mode");
        break;
}

从上面的代码中只检测一种模式。但我想检查2模式,无论是振铃+振动还是静音+振动。

怎么可能?

3 个答案:

答案 0 :(得分:2)

没有任何方法可以获得振铃+振动和静音+振动。我们知道我们有三种方法来获得振铃模式。

AudioManager.RINGER_MODE_NORMAL
AudioManager.RINGER_MODE_SILENT
AudioManager.RINGER_MODE_VIBRATE

所以,你只需要创建一个方法来检查振铃和振动的条件

喜欢戒指+振动。

public boolean statusRingVibrate(){
        boolean status = false;
        AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
        if(am.getRingerMode() == AudioManager.RINGER_MODE_NORMAL && am.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE){
            status = true;
        }       
        return status;      
    }   

答案 1 :(得分:2)

我遇到了同样的问题,并将一些方法结合在一起:

public static boolean checkVibreationIsOn(Context context){
    boolean status = false;
    AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
    if(am.getRingerMode() == AudioManager.RINGER_MODE_VIBRATE){
        status = true;
    } else if (1 == Settings.System.getInt(context.getContentResolver(), "vibrate_when_ringing", 0)) //vibrate on
        status = true;
    return status;
}

public static boolean checkRingerIsOn(Context context){
    AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
    return am.getRingerMode() == AudioManager.RINGER_MODE_NORMAL;
}

答案 2 :(得分:0)

嘿请按照link

进行操作

RINGER_MODE_NORMAL:铃声模式可能听得见,可能会振动。如果可以听到更改此模式之前的音量,则会听到声音。如果振动设置打开,它将振动。

RINGER_MODE_VIBRATE:振铃模式,它将保持静音并振动。 (这会使手机振铃器始终振动,但通知振动只会在设定时振动。)

所以AudioManager.RINGER_MODE_NORMAL即' 2'如果手机振动或振铃,将会退回。它将返回AudioManager.RINGER_MODE_VIBRATE,即' 1'如果手机处于静音和振动状态。