背景:我用的手机是MIUI V5系统,4.1.2安卓版本,发现从4.0.3升级到4.1.2后,我的app和系统自带的播放器在音乐控制上冲突,两个app会同时相应MEDIA_BUTTON消息;
MENIFEST.XML中定义了一个receiver,用于接受MEDIA_BUTTON消息,但是和系统的播放器冲突了,系统自带的播放器总能先于我的app收到MEDIA_BUTTON消息: <receiver android:name=".MusicIntentReceiver" >
<intent-filter >
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
用autostart这个app查看了系统播放器的这个receiver的优先级是1000,而我的默认为0,于是在xml中加个优先级2000,大于系统的那个1000:
<receiver android:name=".MusicIntentReceiver" >
<intent-filter android:priority="2000" >
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
这下以为就可以不冲突了,的确我的app先于系统的播放器获得了MEDIA_BUTTON消息,但是系统播放器随后仍然能接收到这个消息并抢占AudioFocus,结果我的app仍然无法工作。于是想着我接收到消息后,能否取消这个消息的向后传播,据我所知android.intent.action.MEDIA_BUTTON这个广播不是OrderedBroadcast,应该不会响应abortBroadcast();这个函数,但是我加上之后奇迹般地生效了,难道android.intent.action.MEDIA_BUTTON变了,不知是否是MIUI团队改过的,目前不清楚,反正安卓4.0.3版本的MIUI上我的app工作还是正常的。