Android 5.0 Lollipop 处理 media buttons 事件的问题

文章标签: android,android5.0
2014-12-4 12:48:27     人阅读    

在android api 21版本之前当用户按住button headset我经常使用 audioManager.registerMediaButtonEventReceiver(receiver); 去处理media button 事件,在 android api 21 之后,MediaSession 貌似可以使用看了,于是我尝试使用如下的代码:

final MediaSession session = new MediaSession(context, "TAG");
session.setCallback(new Callback() {
    @Override
    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);


感觉我写的没啥问题,但是上面的代码没有执行成功,不知道如何才能成功...

 

 

 

处理方法

如果想要处理 media button 事件,需要如下四个步骤:
1、设置MediaSession.Callback 并适当的处理该事件(*)(set a MediaSession.Callback and handle the proper events)

2、设置MediaSession.FLAG_HANDLES_MEDIA_BUTTONS 和 MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS 两个标识

3、 mediaSession 要设置到 active 中
4、按照如下的代码设置 PlaybackState

 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);

我猜测,你应该丢失了第四个步骤,因为你能运行但那时没有正确结果..


原文地址:http://www.itmmd.com/201412/254.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

android EditText 中的TextWatcher 限制小数点位数   上一篇
下一篇  android 5.0中 Toolbar widget的xml配置信息在哪里定义?
精彩回复
#1楼    ; [评论人]:qq327332087   [发表时间]:2014-12-16 17:50:09

第一个步骤不是很明白.... 设置MediaSession.Callback 并适当的处理该事件(*)(set a MediaSession.Callback and handle the proper events)求解释一下

我要追加问题,请求站长解决!
姓名:       

《程序员app》专门为程序员量身定做!