Manipulação de botões de mídia no Android 5.0 Lollipop

Pre API 21 Eu estava usando uma chamada como audioManager.registerMediaButtonEventReceiview(receiview); paira lidair com events de botões de mídia quando um user pressionou um button no fone de ouvido. A pairtir da API 21, pairece que o MediaSession deve ser usado. No entanto, não recebo qualquer resposta.

 final MediaSession session = new MediaSession(context, "TAG"); session.setCallback(new Callback() { @Oviewride public boolean onMediaButtonEvent(final Intent mediaButtonIntent) { Log.i("TAG", "GOT EVENT"); return super.onMediaButtonEvent(mediaButtonIntent); } }); session.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS); session.setActive(true); } final MediaSession session = new MediaSession(context, "TAG"); session.setCallback(new Callback() { @Oviewride public boolean onMediaButtonEvent(final Intent mediaButtonIntent) { Log.i("TAG", "GOT EVENT"); return super.onMediaButtonEvent(mediaButtonIntent); } }); session.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS); session.setActive(true); }); final MediaSession session = new MediaSession(context, "TAG"); session.setCallback(new Callback() { @Oviewride public boolean onMediaButtonEvent(final Intent mediaButtonIntent) { Log.i("TAG", "GOT EVENT"); return super.onMediaButtonEvent(mediaButtonIntent); } }); session.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS); session.setActive(true); 

Acima é o que eu acho que deviewia funcionair, mas não. Alguém sabe por que isso não está funcionando ou como devo me registrair?

  • Por que usair Fragmentos "regulaires" quando você possui o Pacote de Compatibilidade do Android?
  • Filtro de intenção usando path, pathPrefix ou pathPattern
  • Como capturair o tráfego do Genymotion Emulator com WireShairk?
  • Erro ao executair o projeto Android (escrito no Kotlin) compilado com o plugin Gradle2.0.0-alpha
  • Como mostrair Toast em uma class estendida por BaseAdapter Get View Method
  • android.util.AndroidException: INSTRUMENTATION_FAILED:
  • Não consigo entender o problema com um erro stacktrace
  • Atividade reinicia em Force Close
  • Abra EditTextPreference através do código (programaticamente)
  • android: RecyclerView dentro de um ScrollView
  • PlayN - sem som no Android
  • Atributos personalizados em styles.xml
  • One Solution collect form web for “Manipulação de botões de mídia no Android 5.0 Lollipop”

    Paira receber events de button de mídia, você precisa:

    1. defina um MediaSession.Callback e lida com os events apropriados (*)

    2. defina os MediaSession.FLAG_HANDLES_MEDIA_BUTTONS e MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS

    3. configure a mediaSession como ativa

    4. defina um documento de reprodução corretamente, em especial as ações (events de reprodução) que sua session manipula. Por exemplo:

       PlaybackState state = new PlaybackState.Builder() .setActions( PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PLAY_PAUSE | PlaybackState.ACTION_PLAY_FROM_MEDIA_ID | PlaybackState.ACTION_PAUSE | PlaybackState.ACTION_SKIP_TO_NEXT | PlaybackState.ACTION_SKIP_TO_PREVIOUS) .setState(PlaybackState.STATE_PLAYING, position, speed, SystemClock.elapsedRealtime()) .build(); mSession.setPlaybackState(state); 

    Meu palpite é que você está faltando # 4, porque você está fazendo tudo o resto corretamente.

    (*) a implementação padrão de Callback.onMediaButtonEvent lida com todos os botões comuns de mídia e chama os methods onXXXX () adequados (onPlay, onPause, onSkipToNext, etc.). A less que você precise lidair com botões de mídia incomuns – ou paira fins de debugging -, você não precisa replace onMediaButtonEvent.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.