背景:我用的手机是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 >
<act
ion android:name="android.intent.act
ion.MEDIA_BUTTON" />
</intent-filter>
</receiver>
用autostart这个app查看了系统播放器的这个receiver的优先级是1000,而我的默认为0,于是在xml中
加个优先级2000,大于系统的那个1000:
<receiver android:name=".MusicIntentReceiver" >
<intent-filter
android:priority="2000"
>
<act
ion android:name="android.intent.act
ion.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工作还是正常的。