Android监听音频标题信息实现方式

#有没有什么能够知道Android手机中,所有播放的媒体信息的标题
#初步设想是在网上发现一个是监听通知栏变化,还有MediaSession但不太懂

Android系统提供了一些API来监听和获取正在播放的媒体信息,主要有以下几种方式:

  1. 使用MediaSessionManager和MediaController来监听和控制正在播放的媒体。可以通过MediaSessionManager的addOnActiveSessionsChangedListener()方法添加监听器,在收到回调时可以获取活动的MediaSession对象,再通过MediaController来获取媒体信息。
  2. 监听系统的音频焦点变化,通过AudioManager的OnAudioFocusChangeListener可以获得焦点切换事件,在焦点切换时可以获知前后播放的媒体信息。
  3. 通过NotificationListenerService来监听通知栏的变化,识别出音频类通知后可以通过解析通知内容来获取标题、艺术家等信息。
  4. 对于Android 8.0以上,可以使用MediaSession.Callback()来直接接收媒体播放状态的变化,包括metadata、播放状态等,可以获得媒体信息。
  5. 对于特定音频应用,如果它具有可访问的播放器接口,也可以主动连接获取它正在播放的信息。
    综合利用这些API,可以实现监听和获取Android系统中正在播放的音频的标题等信息。需要注意权限申请,以及不同Android版本API的兼容性问题。
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/248518
  • 这篇博客你也可以参考下:Android与单片机的信息传输方案
  • 同时,你还可以查看手册:android Era 一个时代的时间线。 中的内容
  • 除此之外, 这篇博客: Android 获取机型设备信息中的 例如 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 这里写图片描述

    1. Build类包含的信息
      这里写图片描述
      主要读取的是手机系统\system\build.prop(Galaxy Nexus为例)

    这里写图片描述
    2. 部分已知适配问题
    由于Android系统的开放性,各大OEM厂商会以Android为基础为手机开发自己的ROM,上面的程序片段通过判断厂商和机型的方式来进行代码层面的适配,理论上这里不会有问题发生,但实际上获取厂商信息和机型信息的时候会出现你想像不到情况发生:

    情况一:厂商信息获取不唯一
    摩托罗拉的厂商信息不仅是”motorola”还有”mot”和”FIH”;
    索爱的厂商信息不仅是”Sony”还有”Sony Ericsson”;
    HTC的厂商信息不仅是”HTC”还有”HUN”;
    OPPO的厂商信息不仅是”OPPO”还有”alps”;
    酷派的厂商信息不仅是”CoolPad”还有”YuLong”;
    …..
    情况二:机型信息获取比较奇葩
    红米model值为数字,model值为“2013022”的奇葩字符串。
    …..
    情况三:厂商信息或机型信息获取为unknown
    联想A60获取厂商信息为unknown;造成这种问题的原因是厂商随意改动framework层导致的。
    3. 适配建议
    根据以上情况希望可以为Android开发者同学在适配工作中提供一定的借鉴和帮助。
    我们给出的第一种解决方案是“规避已知问题”。例如,厂商信息不唯一时,我们就搜罗该厂商信息的所有可能,从而进行准确的判断,如下:
    这里写图片描述
    当获取机型信息为unknown时,我们还可以通过手机设备的其他信息来判断手机具体机型,如下:
    这里写图片描述

  • 您还可以看一下 张晨光老师的零基础学安卓Android移动开发课程中的 数据存储的实现小节, 巩固相关知识点