Android 多媒体控制 来电监听-耳机插拔监听-耳机按钮监听-MediaSession-MediaStyle

这个系列仅仅包含控制部分 , 不包含音频操作代码 , 如 pauseAudio(); 我不会说这个方法里是怎么操作的 , 大家需要结合自己的音频播放处理来实现.

Android多媒体控制

一个完整的多媒体播放器应该有的基础功能:

  • 通过耳机按钮来控制歌曲 播放/暂停 上/下一首歌曲
  • 当有线耳机/蓝牙耳机 断开连接和重新连接的时候 我们应该对应做出 暂停音频 恢复音频
  • 使用系统提供的Notification.MediaStyle来控制歌曲 , 可以顺利兼容 android 4.x ~ android 7.x 现在的系统样式

[[广告]] https://github.com/ocwvar/DarkPurple

需要代码样例的同学可以在我的这个项目中查看 这个项目是个完整的音频播放器 这里的代码均是从里面提取 , 同时还有均衡器调节 频谱动画显示等.. 目前正在不断完善中 , 但由于上班 , 代码更新可能不及时.



###1. 创建 MediaSessionCompat 对象
MediaSessionCompat sessionCompat = new MediaSessionCompat();

在这个构造方法中 , 我们使用这个:

MediaSessionCompat(Context context, String tag, ComponentName mbrComponent, PendingIntent mbrIntent)

//第一个参数 context: 这个没有什么好讲的,大家都懂的
//第二个参数 tag: 这个是用于调试用的,随便填写即可
//第三个参数 mbrComponent: 这个是用于API21以下的时候传递耳机按钮事件用的MediaSessionCompat.
//第四个参数 mbrIntent: 这个是给API21以下传递的时候携带的,一般设为 NULL即可

//例如:
//其中的HeadsetButtonReceiver是我们的API21以下实用的监听器 , 我们稍候再讲
ComponentName cn = new ComponentName(this.context.getApplicationContext().getPackageName(),
          HeadsetButtonReceiver.class.getName())
sessionCompat = new MediaSessionCompat(this.context.getApplicationContext(), "test", cn, null);
参数设置
sessionCompat = new MediaSessionCompat(...);

//设置MediaSession回调监听,主要用于设置API21+的耳机按钮监听
sessionCompat.setCallback(new MediaSessionCallback());

//设置FLAG,FLAG的用途一看名字就知道了
sessionCompat.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS);

//设置MediaSession启动 (很重要,不启动则无法接受到数据)
sessionCompat.setActive(true);



2. 耳机多媒体按钮监听

API 21+ 的方式 MediaSessionCompat.Callback

//创建完成后用MediaSessionCompat.setCallback设置上即可使用

private class MediaSessionCallback extends MediaSessionCompat.Callback {
   

        @Override
        public boolean onMediaButtonEvent(Intent mediaButtonEvent) {

            //接收到监听事件

        }

    }
API21- 的方式 HeadsetButtonReceive
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
是的,MediaSession可以监听按键事件,以便在收到按键事件时执行相应的操作。您可以使用MediaSessionCompat类的setCallback()方法来设置一个MediaSessionCompat.Callback对象,该对象包含onMediaButtonEvent()方法,该方法将在接收到媒体按键事件时被调用。在onMediaButtonEvent()方法中,您可以根据接收到的按键事件类型执行自定义操作。以下是一个示例代码: ``` MediaSessionCompat mediaSession = new MediaSessionCompat(context, "tag"); mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); mediaSession.setCallback(new MediaSessionCompat.Callback() { @Override public boolean onMediaButtonEvent(Intent mediaButtonIntent) { String intentAction = mediaButtonIntent.getAction(); if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) { KeyEvent event = mediaButtonIntent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event != null && event.getAction() == KeyEvent.ACTION_DOWN) { switch (event.getKeyCode()) { case KeyEvent.KEYCODE_MEDIA_PLAY: // 执行播放操作 break; case KeyEvent.KEYCODE_MEDIA_PAUSE: // 执行暂停操作 break; case KeyEvent.KEYCODE_MEDIA_NEXT: // 执行下一首操作 break; case KeyEvent.KEYCODE_MEDIA_PREVIOUS: // 执行上一首操作 break; } } } return super.onMediaButtonEvent(mediaButtonIntent); } }); ``` 在上面的示例中,我们设置了MediaSessionCompat.Callback对象,并在onMediaButtonEvent()方法中监听媒体按键事件,并根据按键事件类型执行不同的操作。当接收到媒体按键事件时,系统会自动调用onMediaButtonEvent()方法,并将相应的Intent对象传递给它。您可以使用Intent对象获取按键事件类型以及其他相关信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值