1.播放与暂停,这是同一个按钮。只是要根据当前的情况不同来执行不同的功能,尤其是初始状 态,有可能改程序执行时,已经有音乐在播放,所以这里要进行判断,这个可以通过AudioManager的isMusicActive()方法来判断音乐的状况,但是由于智能判断音乐是否开始,但是无法分辨出音乐结束还是暂停。
2.一般的播放器会有拔出耳机就暂停音乐的设定,所以我们的控制器也要随之变化,不过android系统提供了耳机拔出或插入的广播,我们可以监听这个广播然后进行操作。
3.由于有的播放器在通知栏可以操作播放器播放状态,所以他可以不开屏的状态下直接暂停(或其他操作)音乐。但是我们在锁屏页面无法知道这个操作,无法更新我们页面的按钮。而且通知栏操作属于其软件的内部操作,不需要像我们一样使用广播,所以也无法监听广播来控制。经过思考,由于没有接收到通知的方法。只能选择监控的方式来进行,所以我在后台写了一个timer来每间隔一秒监控一次当前的音乐播放状态,如果发现与显示的状态不符,则将其修改正确。这种方法比较浪费资源,但是基本可以满足需求。所以在资源不紧张的情况下可以考虑使用。
4.在android4.4中,系统修改了远程控制音乐播放的相关api导致曾经的方法出现问题。这里简单描述一下,在4.4之前,我使用sendOrderedBroadcast的方式来发送广播,防止这个广播被多个音乐软件同时收到导致播放错乱(有的并未启动的音乐软件甚至会因为收到了这个广播而自启动)。但是在4.4后,使用有序广播则无法正常控制音乐软件,必须使用无序的放送方法才能控制。但也同时导致了上述问题。为了单一控制,我准备在广播的intent中加入目标包,即通过setPackage的方法,指定广播的发送对象。经过测试,确实可以完美解决广播控制多个音乐软件的问题。