查看frameworks/base/media/java/android/media/AudioManager.java
/**
* Ringer mode that will be silent and will not vibrate. (This overrides the
* vibrate setting.)
*
* @see #setRingerMode(int)
* @see #getRingerMode()
*/
public static final int RINGER_MODE_SILENT = 0;
/**
* Ringer mode that will be silent and will vibrate. (This will cause the
* phone ringer to always vibrate, but the notification vibrate to only
* vibrate if set.)
*
* @see #setRingerMode(int)
* @see #getRingerMode()
*/
public static final int RINGER_MODE_VIBRATE = 1;
/**
* Ringer mode that may be audible and may vibrate. It will be audible if
* the volume before changing out of this mode was audible. It will vibrate
* if the vibrate setting is on.
*
* @see #setRingerMode(int)
* @see #getRingerMode()
*/
public static final int RINGER_MODE_NORMAL = 2;
通过AudioManager 可看出存在三种状态
/**
* Returns the current ringtone mode.
*
* @return The current ringtone mode, one of {@link #RINGER_MODE_NORMAL},
* {@link #RINGER_MODE_SILENT}, or {@link #RINGER_MODE_VIBRATE}.
* @see #setRingerMode(int)
*/
public int getRingerMode() {
final IAudioService service = getService();
try {
return service.getRingerModeExternal();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
则想知道当前手机铃音状态,可直接getRingerMode()获取:
import android.media.AudioManager;
AudioManager audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
final int ringerMode = am.getRingerMode();
switch (ringerMode) {
case AudioManager.RINGER_MODE_NORMAL:
//normal
break;
case AudioManager.RINGER_MODE_VIBRATE:
//vibrate
break;
case AudioManager.RINGER_MODE_SILENT:
//silent
break;
}
当用户设置情景模式时,系统会广播一个 RING_MODE_CHANGE_ACTION 消息,我们也可以定义一个广播接收器,监听此消息,然后通过 AudioManager 提供的接口判断当前的情景模式做出特定的处理。
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(AudioManager.RING_MODE_CHANGE_ACTION)) {
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
final int ringerMode = am.getRingerMode();
switch (ringerMode) {
case AudioManager.RINGER_MODE_NORMAL:
//normal
break;
case AudioManager.RINGER_MODE_VIBRATE:
//vibrate
break;
case AudioManager.RINGER_MODE_SILENT:
//silent
break;
}
}
}
}