2

Is there a way to get notified when the user mutes the incoming call ring signal by pressing the volume button and/or turn to silence?

I have tried all methods I can find, using AudioManager.RINGER_MODE_CHANGE_ACTION, android.media.VOLUME_CHANGE_ACTION, android.media.MASTER_MUTE_CHANGED_ACTION and a few more... None of them give a clear indication that the ring signal is muted.

My problem is not solved by the "possible duplicate", so I will expand with parts of my code for more help.

In my service:

@Override
public void onCreate() {
  super.onCreate();

  mVolumeReceiver = new VolumeReceiver();
  IntentFilter intentFilter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
  registerReceiver(mVolumeReceiver, intentFilter);
}

private class VolumeReceiver extends BroadcastReceiver {
  private final String TAG = VolumeReceiver.class.getSimpleName();

  @Override
  public void onReceive(Context context, Intent intent) {
    final String[] Modes = { "Unknown", "Silent", "Vibrate", "Normal" };

    if (intent.getAction().equals(AudioManager.RINGER_MODE_CHANGED_ACTION)) {
      int newMode = intent.getIntExtra(AudioManager.EXTRA_RINGER_MODE, -1);
      Log.i(TAG, "Ringer mode changed to: " + Modes[newMode + 1]);
    }
  }
}

I am certain that my service is started, since it's doing other things as it should.

I also tried to register a BroadcastReceiver class in my manifest, but that didn't work either.

I do get one Logcat entry telling me mode is changed to "Normal", probably when the receiver is registered. After that, nothing.

Jörgen
  • 21
  • 4

0 Answers0