下面是我对实现过程的总结,看实现方式请直接到博客最后即可。
=====================================过程总结======================================
上几篇博客简单说明了我制作一个远程控制音乐播放软件的方式,目的其实就是想要实现在锁屏界面自由控制音乐的播放与暂停。但是却遇到了很多阻碍,这个前面几篇已经说过,一些常见问题都写了解答。问题的原因其实都是出在控制广播的版本适配上面。由于不用版本接受MediaButton事件广播的处理机制不同,导致出现了一系列问题。这里我准备介绍一种新的方式来实现该功能。
这个功能的本质是利用android自带的给耳机按钮留的接口来实现锁屏控制,这一点无法改变。由于耳机在安卓内部也是使用广播的方式进行。所以我们使用了广播来做。其实完全可以绕过这部,直接利用系统内部的对耳机按钮事件的处理方式即可,发广播的事让系统去做。我们只需要传递事件即可。而上篇博客已经说过,android是如何发送MediaButton广播的,即利用dispatchMediaKeyEvent()方法。这里我们就要使用这个方法来让系统实现我们的事件。使用这个方法,我们需要拿到AudioService。AudioService是被AudioManager通过binder机制来使用的。而在AudioManager中是有AudioService的静态变量的。可惜是私有的,我们不能直接使用,这里就通过反射,获取到这个变量。AudioService也是内部函数,所以也要通过反射来调用其方法。有了这些就已经足够了我们实现功能了。实现方式如下:
====================================功能实现====================================
AudioManager audioManager =
(AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
Class<? extends AudioManager> AM = audioManager.getClass();
Class<IAudioService> IAS = IAudioService.class;
Field service = null;
try {
service = AM.getDeclaredField("sService"); //反射静态变量属性字段
service.setAccessible(true); //设置访问权限
Object service = service.get(null); //获取静态变量对象
Method dispatchMediaKeyEvent = IAS.getDeclaredMethod(
"dispatchMediaKeyEvent", KeyEvent.class); //获取方法
dispatchMediaKeyEvent .invoke(service ,
new KeyEvent(65535L, 200L, KeyEvent.ACTION_DOWN, keyCode,
0, 0, 248, 226, 8));
Thread.sleep(200L); //模拟按钮按下抬起
dispatchMediaKeyEvent .invoke(service ,
new KeyEvent(65535L, 200L, KeyEvent.ACTION_UP, keyCode,
0, 0, 248, 0, 8));
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这种直接利用系统来实现的方式,可以完全不用担心版本适配的问题。
相关推荐
紧急报警广播在接收到消防信号后,无论背景音乐处于何种状态,都会立即切换至紧急状态。切换方式有两种: - 全切:所有楼层停止背景音乐,仅事故楼层及相邻楼层进行紧急报警广播,使用优先口输入的功率放大器切换。...
广播系统设计兼顾背景音乐播放与日常管理信息的发布,以及在紧急情况下进行疏散广播的功能。系统强调创造优雅、舒适的工作和生活环境,同时增强物业管理效率。背景音乐系统可定时播放各种高质量音源,如数字音乐、CD...
通过研究这个源码,我们可以学习到如何在安卓平台上实现音乐播放、音量控制、播放列表管理等核心功能。 1. **音乐播放器架构** - 源码通常包含一个主活动(MainActivity)作为入口,负责界面展示和逻辑控制。 - ...
消防广播采用N,N±1形式,针对83个防火分区,根据消防状况决定播放报警音的区域,确保人员安全撤离。消防分区控制器具备手动切换和全切功能,以适应不同消防需求。系统还具备自检功能,能检测主机、功率放大器状态...
此外,对于教学、广播、健身或任何形式的公开演讲环境,定时播放音乐或音频也能确保活动按计划进行,无需人工实时操作。 "自动关机"功能是该系统的一大亮点,它允许用户在播放结束后设定电脑自动关闭,节省能源并...
5. 扬声器的选择与数量:根据公园环境选择合适的音箱/音柱,满足背景音乐和广播需求。 6. 服务器备份:双机备份结构,确保服务器故障时广播服务不间断。 7. 故障检测:实时检测前端设备状态,便于及时发现并处理问题...
5. **通知栏控制**:为了让用户在后台也能方便地控制音乐播放,可以使用Android的通知栏。创建一个通知,并添加媒体控制器,用户就可以在通知中心进行播放、暂停等操作。 6. **权限管理**:考虑到Android 6.0及更高...
- **应急广播设备**:如火警报警器的最大分贝数、紧急广播控制器的控制范围等。 #### 五、品牌案例 ##### 5.1 公司介绍 广州保伦电子是一家专注于智能公共广播系统设计和制造的高科技企业。公司拥有一支经验丰富、...
方案的核心是构建基于IP数据网络的智能广播系统,这种系统具备数字化、网络化、智能化的特点,能够实现背景音乐播放、园区管理、定向广播、紧急疏散和语音导游等多种功能。 1. 数字化音频处理:系统要求将模拟音频...
这一系统的核心是基于IP数据网络的智能IP网络广播系统,它结合了数字音频、网络编解码和流媒体技术,以实现背景音乐播放、园区管理、寻址播放、紧急疏散和语音导游等多种功能。 首先,公园景区的网络广播系统要求...
这个系统广泛应用于学校、企事业单位、公共广播等领域,以实现定时通知、提醒、音乐播放等功能。 【描述】"src:定时广播系统源码"表明这是该系统的源代码,src是Source Code(源代码)的缩写。源码是程序设计的基础...
- **背景音乐与广告播放**: 可以播放背景音乐或广告语,增强产品的交互性和实用性。 - **插播功能**: 在播放过程中支持插播其他语音片段,并且能够在插播结束后从上次播放的位置继续播放,确保了播放的连贯性。 - **...
音乐/广播系统通过安装在建筑物内部不同位置(如商场、车站、餐厅、客房、走廊等)的扬声器播放音乐,并可通过麦克风进行现场广播。系统采用多路总线结构,使用功率放大器输出定压(如120V/120Ω)的音频信号,驱动...
它可以执行音乐播放、定时任务、后台数据同步等工作。 2.7 安卓权限管理 Android应用需要声明所需的权限,如访问网络、读写文件等。用户在安装应用时会看到权限请求,提高应用的安全性和透明度。 总之,Android...
* 音频显示方式按钮框:控制音频波普在轨道上显示的形式 * 工具栏:上面载有常用的操作快捷选项按钮,例如‘回撤操作’ * 编辑模式主菜单栏:面板顶部的功能菜单栏,通过它来快速设置软件 * 声音波形显示窗口:显示...
广播接收器(BroadcastReceiver)可能用于监听设备状态变化,比如屏幕旋转或者网络连接状态。 游戏的核心部分是游戏逻辑和渲染。在源码中,游戏逻辑通常包含在一个单独的类或者模块中,这个类处理游戏的循环、碰撞...
4. **mpc**:MPC (Music Player Daemon) 是一个音乐播放器,支持流式传输,可以用来控制音乐播放。 5. **WFMU**:WFMU 是一个美国的非商业、自由形式的广播电台,这里代表了可以通过该前端应用程序流式传输的电台。 ...
6. **软件模式**:通过串行控制接口,具有块大小缓冲区处理通道状态数据,并支持自动增量模式进行写入和读取操作,简化编程。 7. **硬件模式**:允许在没有微控制器的情况下独立运行,降低了系统复杂性。 8. **CRC码...
2. **播放控制**:提供播放、暂停、快进、后退等基本控制功能,用户可以随时调整音乐播放状态。 3. **播放列表管理**:允许用户创建和管理自己的播放列表,收藏喜欢的歌曲或DJ的节目。 4. **离线缓存**:对于付费或...
- **定义**: 指音频信号或设备处于暂停状态,即暂时不进行播放或处理的状态。 - **用途**: 在音频编辑过程中用于临时停止播放以便进行调整或检查。 #### A-B Repeat (A-B重复) - **定义**: 一种功能,允许用户设定...