Cделать так, чтобы при отключении наушников ставилась пауза для музыки?

341
09 мая 2017, 03:41

Есть приложение, которое воспроизводит через интернет радио потоки. Присутствуют кнопки, чтобы останавливать проигрывание и продолжать его.

Если слушать радио в наушниках, и вынуть их, то радио продолжает играть.

Нужно сделать так, чтобы при отключении наушников ставилась пауза. Я новичок в программировании, и совсем не пойму как это реализовать.

Буду очень сильно благодарен за подробный ответ на мой вопрос. Мне подсказали, что для этого есть специальное событие, о котором уведомляет система. "Поймать" его можно с помощью так называемых Broadcast Reciever'ов. Вот код, который показывает, как узнать о подключении/отключении наушников:

  private static final String TAG = "MainActivity";
  private MusicIntentReceiver myReceiver;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    myReceiver = new MusicIntentReceiver();
  }
  @Override
  public void onResume(){ 
    IntentFilter filter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
    registerReceiver(myReceiver, filter);
    super.onResume(); 
  }

  private class MusicIntentReceiver extends BroadcastReceiver { 
    @Override public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
        int state = intent.getIntExtra("state", -1);
        switch (state) { 
          case 0: Log.d(TAG, "Наушники отключены"); break; 
          case 1: Log.d(TAG, "Наушники подключены"); break; 
          default: Log.d(TAG, "Неизвестное состояние"); 
        } 
      }
    }
  } 
  @Override
  public void onPause() {
    unregisterReceiver(myReceiver);
    super.onPause(); 
  }
}

Что с ним делать дальше я не совсем понял. Куда вставить и что поменять/создать?

Answer 1

Данный код описывает MainActivity и подключение reciever'а

Больше всего вас должен интересовать класс:

private class MusicIntentReceiver extends BroadcastReceiver { 
  @Override public void onReceive(Context context, Intent intent) { 
    if (intent.getAction().equals(Intent.ACTION_HEADSET_PLUG)) {
      int state = intent.getIntExtra("state", -1);
      switch (state) { 
        case 0: Log.d(TAG, "Наушники отключены"); break; 
        case 1: Log.d(TAG, "Наушники подключены"); break; 
        default: Log.d(TAG, "Неизвестное состояние"); 
      } 
    }
  }
} 

а в частности строка case 0: Log.d(TAG, "Наушники отключены"); break;

Вставьте код, завершения проигрывания, в неё

case 0:
 if(mediaPlayer.isPlaying()){
    mediaPlayer.pause();
 } 
break;
READ ALSO
Java - напечатать пирамиду в консоли

Java - напечатать пирамиду в консоли

Надо напечатать вот так пирамидукак сделать, чтобы она вот так была "отцентрована" по правому краю? Пробелами? Размер пирамиды задается с клавиатуры

282
Можно ли закрыть прямоугольник кругом?

Можно ли закрыть прямоугольник кругом?

Имеется прямоугольное отверстие размерами a и b, определить, можно ли его полностью закрыть круглой картонкой радиусом r

874
Помогите исправить ошибку при создании DB

Помогите исправить ошибку при создании DB

У меня метод создает базу:

175