查看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;
It can be seen from AudioManager that there are three states
/**
* 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();
}
}
If you want to know the current ringtone status of the mobile phone, you can directly getRingerMode () to get:
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;
}
When the user sets the scene mode, the system will broadcast a RING_MODE_CHANGE_ACTION message, we can also define a broadcast receiver, listen to this message, and then determine the current scene mode through the interface provided by AudioManager to make specific processing.
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;
}
}
}
}