Звонок, режим смены слушателя, широковещательный приемник? - PullRequest
13 голосов
/ 20 сентября 2011
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;
}

Из приведенного выше кода я могу получить режим звонка. Я хотел бы прослушать изменения режима звонка и вызвать функцию.

Мне сказали, что я могу зарегистрировать AudioManager. RINGER_MODE_CHANGED_ACTION и прослушать намерение изменения в методе приемника трансляции на методе ReReceive. Звучит ясно. Но я новичок в Android и действительно не знаю, как написать это. Кто-нибудь может просто написать кусок кода и показать, как именно он работает, вместо того, чтобы сказать, использовать тот или иной :) Спасибо

Ответы [ 3 ]

17 голосов
/ 20 сентября 2011

Используйте следующий код внутри onCreate() метода вашего Activity или Service, для которого вы хотите обработать трансляцию:

      BroadcastReceiver receiver=new BroadcastReceiver(){
          @Override
          public void onReceive(Context context, Intent intent) {
               //code...
          }
      };
      IntentFilter filter=new IntentFilter(
                      AudioManager.RINGER_MODE_CHANGED_ACTION);
      registerReceiver(receiver,filter);
13 голосов
/ 01 марта 2012

Другое решение - добавить получателя с действием в манифесте:

<receiver android:name=".receivers.RingerModeStateChangeReceiver" >
    <intent-filter>
        <action android:name="android.media.RINGER_MODE_CHANGED" />
    </intent-filter>
</receiver>

и ваш класс RingerModeStateChangeReceiver должен расширить BroadcastReceiver.

0 голосов
/ 20 марта 2018

Вот версия обновления в Kotlin.Поместите это под ваш onCreate() жизненный цикл.

this.activity?.registerReceiver(object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            if (intent.action == AudioManager.RINGER_MODE_CHANGED_ACTION) {
                // Set Player Volume
            }
        }
    }, IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION))
...