首先我个人先吐槽一下,这是一个吃力不讨好的活。为什么?因为现在安卓手机的各种定制rom五花八门,各种各样,miui、乐蛙、emui、努比亚。。。我们今天要做的事情就是要在各种系统的锁屏界面,出现一个音乐控件,用来做一些简单的音乐播放的控制。
做之前,习惯性的看了各大家的做法:酷我、多米等,这些家的做法的思路都一样,都是在自己的应用中监听power锁屏事件,然后加一个“假锁屏”,即每次锁屏再打开的时候,首先显示的是自己音乐的锁屏,滑开以后再跳到系统的锁屏。这样做的好处是,通吃各种系统,弊端也是显而易见:锁屏太多了!!!尼玛,对于普通用户,究竟要滑几次才能解开?
假锁屏的方案弃置后,只能牺牲适配性,而考虑实用性,于是有了本文。本文做的是,针对安卓原生系统开发的音乐控件!因为是建立在原生的keyguard上的,所以一些野路子第三方ROM不支持,也是正常。正文开始:
基于原生android开发,需要用的一个很重要的类RemoteControlClient,RemoteControlClient是从API 14也就是android 4.0开始出现的类,用于在锁屏状态控制音乐播放。界面是系统提供的。
api doc文档上附了一段注册代码
<pre class="prettyprint" name="code" style="white-space: pre-wrap; word-wrap: break-word; font-size: 14px; margin-top: 0px; margin-bottom: 1em; color: rgb(0, 102, 0); line-height: 1.5; font-family: 'courier new', courier, monospace; padding: 1em; overflow: auto; border: 1px solid rgb(221, 221, 221); background-color: rgb(247, 247, 247);"><span class="typ" style="color: rgb(102, 0, 102);">ComponentName</span><span class="pln" style="color: rgb(0, 0, 0);"> myEventReceiver </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">new</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">ComponentName</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">getPackageName</span><span class="pun" style="color: rgb(102, 102, 0);">(),</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">MyRemoteControlEventReceiver</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="kwd" style="color: rgb(0, 0, 136);">class</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">getName</span><span class="pun" style="color: rgb(102, 102, 0);">());</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">AudioManager</span><span class="pln" style="color: rgb(0, 0, 0);"> myAudioManager </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">AudioManager</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);"> getSystemService</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">Context</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">AUDIO_SERVICE</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);"> myAudioManager</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">registerMediaButtonEventReceiver</span><span class="pun" style="color: rgb(102, 102, 0);">