写一个APP控制第三方播放器播放,以及获取正在播放的歌曲信息

Android 控制第三方音乐播放器 这里主要实现APP能够控制第三方音乐播放器的播放、暂停、下一首、上一首功能。 RemoteController :这个是官方的音乐控制接口,需要配合 NotificationListenerService 来使用,比较繁琐。测试后发现除了酷狗以外的第三方播放器都能正常控制,可能是酷狗做了什么处理。 AudioManager:这个就最简单了,只需要调用 dispatchMediaKeyEvent 发送 KeyEvent 就能实现。下面是具体实现: /** * 播放 暂停 *. 阅读详情

      最近遇到这么一个需求,就是在自己的应用中控制第三方播放器播放,以及获取正在播放的歌曲信息,包括名字,歌手,专辑,显示出来。一开始觉得很简单,但实际上遇到了不少的麻烦,最终实现了两种方案,读者可根据自己需要选择。

      先讲如何控制第三方播放器播放的问题,可以使用RemoteControlService,里面有相关的方法,但究其原理,还是模拟耳机信号来控制。我们知道当耳机按下一曲时,无论是系统自带播放器还是第三方播放器都会做出相应的反应,所以这里我直接模拟发出耳机的keycode,就可以控制播放、暂停、上一曲、下一曲了,这个实现得比较轻松,代码如下:

public static void sendKeyEvent(final int KeyCode) {
        new Thread() {     //不可在主线程中调用
            public void run() {
                try {
                    Instrumentation inst = new Instrumentation();
                    inst.sendKeyDownUpSync(KeyCode);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

        }.start();
    }
然后调用这个方法:

sendKeyEvent(85);  //暂停

sendKeyEvent(87);  //下一曲

sendKeyEvent(88);  //上一曲

      接着说如何获取正在播放的歌曲信息的问题,第一个方案是使用RemoteControlService,继承NotificationListenerService,实现RemoteController.OnClientUpdateListener接口,原理就是播放器在切换歌曲的时候,会给系统发一个Notification,告诉系统歌曲切换了,而其中就包含了歌曲的信息,可以拦截Notification来获取到里面的信息,但是有个弊端,你需要开启一个Service来监听,而且需要系统授权,这是最大的问题,如果用户不授权,你将无法获取信息,非常被动,但这个方法几乎能获取到所有第三方播放器的歌曲信息(酷狗不行,不知道为何,可能他发出的Notification里没有包含相关信息。而网易云我是监听不到Notification的,但却获取到了,非常奇怪)。代码如下:

import android.annotation.TargetApi;
import android.content.Intent;
import android.media.AudioManager;
import android.media.RemoteController;
import android.os.Binder;
import android.os.Build;
import android.os.IBinder;
import android.os.SystemClock;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.util.Log;
import android.view.KeyEvent;

/**
 * Created by wangzhaopeng on 2017/11/20.
 */

@TargetApi(Build.VERSION_CODES.KITKAT)

public class RemoteControlService extends NotificationListenerService implements RemoteController.OnClientUpdateListene
Android获取网易云音乐歌曲详细信息 Android获取网易云音乐歌曲详细信息一、目标二、实现方案三、最终方案四、遗留问题五、接下来六、Finally 在《Android获取歌曲详细信息》一文中,介绍了几种获取网易云音乐歌曲详情的方式。 现在来看看结果如何。 一、目标 验证获取网易云音乐歌曲详细信息的几种实现方式的结果。 二、实现方案 私有API 名称 描述 接口地址 http://music.163.com/ap... 阅读详情

相关推荐

app inventor入门详细教程(音乐播放器)01

App inventor 介绍 简介 App Inventor是由Google公司开发的一款在线开放的Android编程工具软件,通过图形化积木式的拖放组件来完成Apps开发 App Inventor在2012年1月移交给麻省理工学院MIT的行动学习中心,并由MIT发布使用,目前已经发布了第2版本 特点 开发环境搭建简单。采用浏览器+云服务模式,无需复杂软件安装 开发过程简单。手机App的界面设计和行为开发都可以通过可视化的拖放拼接组件来完成,无需关注复杂的语法规则 组件模块丰富。App Invent

沸腾的石灰 1万+

使用AndroidStudio开发一个简易的音乐播放器

一、软件成品展现: 1.登录首页界面 2.在线音乐界面 3.播放界面 4.系统提示与跳转界面 4.退出提示界面 二、编写流程概要 1.编写登录首页界面,完成对手机中已下载的音乐文件进行读取,获得每个音乐文件的专辑名称,专辑图片,歌唱者并展现出来。 2.编写在线音乐界面,本来想完成联网读取音乐文件的功能,但暂时能力有限,只能用文本直...

shaochen2015821426的博客 13万+

Android Studio——简易音频播放器

目的 设计一个具有选歌功能的音频播放器 工具及环境 使用java语言,在Android studio平台上进行开发 功能设计 界面有三个按钮选项,可以停止、播放、暂停音乐。通过选择列表的音乐,播放相应的音频文件 设计思路 先完成界面设计,三个选项按钮和歌曲选择列表。通过重置MediaPlayer到初始状态实现歌曲的停止功能 代码 activity_main.xml <?...

MofukYXM的博客 7041

Android Studio简易音乐播放器设计作业

Android Studio简易音乐播放器设计作业实验成功展示实验代码MainActivity.javaXML文件class文件 利用BroadcastReceiver模拟音乐播放器,实现播放、暂停、音乐切换、显示当前歌曲信息等基本功能。 实验成功展示 实验代码 MainActivity.java activityReceiver用于监听Service传回的广播,onCreate()函数 用于获取相应按钮以及添加监听器、注册receiver,ActivityReceiver子类,负责监听从Service传

higherNOW的博客 4111

Android 音乐播放器的开发教程(一) ----- 小达

Android小卷毛音乐播放器开发教程(一) 前言:2014年12月5号的时候,刚加入学校里的团队不久,组长会给新人发布任务,让我们在做项目的过程中能快速的熟悉android的各项基本知识。第一次的任务就是做一个android的音乐播放器。当时拿到任务的时候也是愣了≡ ̄﹏ ̄≡,什么都不知道,怎么做。然而身为一个程序员,速效的学习并且能灵活的使用,是一项必备的技能,面对问题,咱不能怂,怂就输一半儿

凹凸曼哒小乖兽 1万+

【AVRCP】规范精讲[33]:本地切换播放器并播放,控制端如何优雅感知与同步?

本文深入解析车载蓝牙/耳机开发中AVRCP协议的核心痛点——用户本地切换播放器时的状态同步问题。文章通过时序图详解用户手机端切换音乐App时,车载端UI与控制失效的原因及解决方案。关键点包括:1)控制端必须提前注册Addressed_Player_Changed通知;2)目标端需正确处理旧播放器未完成通知;3)控制端收到变更后需重新注册通知并主动获取歌曲信息。文章还总结了三个典型开发陷阱和对应协议要求,最后通过面试真题检验关键知识点,帮助开发者实现跨播放器的无缝控制体验。

byte轻骑兵的技术小窝 1万+

ROS学习笔记之——无人机PID调参过程记录

For cooperaive inquiries, please visit the website:guanweipeng.com

gwpscut的博客 6828

Versal - 从零构建Petalinux 2024.2 AI边缘计算平台(VD100+SDT+JupyterLab实战)

本文详细介绍了如何从零开始,基于AMD Versal VD100开发板和Petalinux 2024.2构建AI边缘计算平台。内容涵盖开发环境搭建、Petalinux工程创建与配置、SDT新流程实战、启动SD卡制作,并最终集成JupyterLab与Conda,打造出开箱即用的交互式AI开发环境,帮助开发者快速进行算法验证与部署。

5f4d3s2a1q的博客 489

扣子(Coze)实战:自动化拆解抖音对标账号,输出完整报告(附源码下载)

本文要分享的工作流,可以实现对标账号的拆解与分析,最后输出一份完整的分析报告,报告中包含有账号基本信息、账号定位、人设设计、选题方向、内容结构、变现路径以及优化建议等。

MCC_MCC_MCC的博客 2827

智能座舱SoC平台横评:SA8155P、SA8255P、SA8295P、MT8678、MT8628 谁是下代车机首选?

高通SA8295P以PC级架构、强悍AI算力,代表安卓阵营迈向“本地大模型+空间计算”阶段;联发科MT8678则凭借低功耗 + 高带宽,成为副驾多媒体/副屏智能化的性价比之王。在座舱设计中,SoC平台决定了你能给用户什么样的交互方式,选型时切忌只看跑分,而要回归“体验-热设计-平台生态”的三角平衡。

weixin_43199439的博客 3358

【C++PCL】点云文件读写

本文介绍 PCL 中 PCD 与 PLY 点云文件的读取、保存和字段检查,覆盖 PointXYZI、PointXYZRGB、ASCII、二进制及压缩二进制,并给出 C++11 实操代码与参数调试建议。

weixin_45196569的博客 42

ADBMS1818芯片

 可测量多达18串电池电压 3 mV最大总测量误差 内置isoSPI接口 使用单根双绞线,长达100米 290 μs内可完成系统中所有单体电池电压测量。

m0_61973119的博客 4274

使用STM32制作智能窗帘控制

以上就是一个简单的基于STM32的智能窗帘控制代码案例。通过感知光线强度和控制步进电机的旋转,我们可以实现智能窗帘的自动开启和关闭。通过定时器的中断来控制步进电机的旋转,从而实现窗帘的开启和关闭动作。最后,我们需要实现主函数和中断函数。在主函数中,我们需要初始化硬件资源,然后进入一个无限循环来不断检测光敏电阻的值,并根据其值来控制窗帘的开启和关闭。接下来,我们需要编写功能函数,用于控制窗帘的开启和关闭。然后,我们需要配置STM32开发环境,并创建一个新的工程。接下来,我们初始化相关的硬件资源。

2401_85258012的博客 277

PyTorch实战(21)——扩散模型(Diffusion Model)

扩散模型通过简单的噪声扩散过程,就能创造出高质量的超现实图像。在本节中,我们首先学习了扩散如何用于图像生成,了解了扩散模型的内部运作机制。随后基于动漫图像数据集,使用 PyTorch 和 Hugging Face 框架训练和运行自定义扩散模型,生成逼真动漫图像。

盼小辉丶的博客 3369

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: 关于Android的BroadcastReceiver的onReceive方法中回调结果给Activity的问题
下一篇: 关于BlockCanary的源码分析
Java_Grass
博客等级 码龄10年 10粉丝 9原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值