2015-11-08 3 views
0

Я совершенно новый для android, и я создаю музыкальный плеер. Я не был знаком с MediaSession, и теперь у меня есть функционал Music Player, но он не поддерживает реакцию на клики на наушники или приостановку входящих вызовов.Android MediaSession не реагирует на наушники

Это мой код:

ComponentName mediaButtonReceiver = new ComponentName(context, MusicPlayerNotificationReceiver.class); 
    final MediaSessionCompat mediaSession = new MediaSessionCompat(context, "Start MP", mediaButtonReceiver, null); 
    mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); 
    LockerActivity.getInstance().runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      mediaSession.setCallback(MusicPlayer.this); 
     } 
    }); 
    mediaSession.setActive(true); 

У меня также есть BroadcastReceiver, который определен с этим действием

<action android:name="android.intent.action.MEDIA_BUTTON" />

Это все из моего кода ralated в MediaSession. Итак, на данный момент я просто пытаюсь получить уведомление о действии от наушников. У меня есть точка останова на первой строке внутри onReceive(), и я нажимаю кнопку в наушниках, и ничего не происходит. Если я долго нажимаю на кнопку, а андроид переходит в режим прослушивания для инструкций по написанию.

Что мне еще нужно?

+0

Попробуйте создать явный широковещательный 'PendingIntent' для класса' MusicPlayerNotificationReceiver' и передать его в качестве четвертого параметра в конструкторе 'MediaSessionCompat'. –

+0

@MikeM. Не работает. – SnapDragon

+0

Вы уверены, что приемник правильно указан в манифесте; правильная орфография, правая папка и т. д.? –

ответ

0

Во-первых, я сделал все вызовы MediaSession для запуска на поток пользовательского интерфейса, то я добавил этот код от Google обучения:

AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); 
... 

// Start listening for button presses 
am.registerMediaButtonEventReceiver(RemoteControlReceiver); 
... 

// Stop listening for button presses 
am.unregisterMediaButtonEventReceiver(RemoteControlReceiver); 

http://developer.android.com/training/managing-audio/volume-playback.html#PlaybackControls

и я увидел, что обратные вызовы, определенные в данном SO ответ: How to use the new MediaSession class to receive media button presses on Android 5.x?

КСТАТИ Он пойманной на MediaSession.Callback, а не в BroadcastReceiver.