android如何确保广播接收者第一个接收到广播?

zhangxuewen1982 2012-05-30 01:08:59
大家知道,android的广播事件是可以被很多注册接收者接收该条广播的,比如,我注册了一个系统来电广播,在onRecevie()里处理系统来电后先静音10秒钟,但是,系统自带的也有来电广播,会触发MediaPlayer去播放铃声,这样的话,我无法保证谁先收到系统来电的广播,所以就出现了有时候系统自带的广播接收者先接收到广播(导致先播放铃声),有时候我注册的广播接收者先收到广播(静音10秒后播放铃声)。如何不让这种随机性出现,让我注册的广播永远第一个收到广播呢?
PS:设置优先级到最大好像没有用,一样会有随机性,因为我怀疑触发MediaPlayer去播放铃声的接收者也是设置的最大的优先级。
...全文
1982 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
吴朗 2015-01-13
  • 打赏
  • 举报
回复
引用 6 楼 hezhejing621 的回复:
你试试当来电时,把这个来电的数据删掉。当系统找不到时,估计就不会先调用系统的
怎么删除来电数据啊?
123zhf321 2013-12-27
  • 打赏
  • 举报
回复
有没有申请对应的权限? <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 是否正确指定接收广播的类型? <intent-filter android:priority="1000" > <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter>
zhangxuewen1982 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

你试试当来电时,把这个来电的数据删掉。当系统找不到时,估计就不会先调用系统的
[/Quote]
不行。你没认真读内容。。。
zhangxuewen1982 2012-05-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

你试试当来电时,把这个来电的数据删掉。当系统找不到时,估计就不会先调用系统的
[/Quote]
不行,来电的时候触发铃声的广播最先收到来电广播,最先处理,最先响铃。
hezhejing621 2012-05-30
  • 打赏
  • 举报
回复
你试试当来电时,把这个来电的数据删掉。当系统找不到时,估计就不会先调用系统的
zhangxuewen1982 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
我听别人说好像要设置一个动态权限,在开机的时候代码设置一下最高权限
[/Quote]
能具体一些吗?
横龙村夫 2012-05-30
  • 打赏
  • 举报
回复
我听别人说好像要设置一个动态权限,在开机的时候代码设置一下最高权限
zhangxuewen1982 2012-05-30
  • 打赏
  • 举报
回复
楼上两位恐怕没仔细看哦,我已经说了设置高优先级的方法没有用了。我已经设置了最大的!

<intent-filter android:priority="2147483647">
南瓜饼 2012-05-30
  • 打赏
  • 举报
回复
广播分两种 一种是普通广播是完全异步的 另一种是有序广播 楼主只要设置大一点的优先级就行了
AMinfo 2012-05-30
  • 打赏
  • 举报
回复
原理上可以通过静态注册receiver的时候,在intent-filter加入 android:priority来设置优先级,数字越大,优先级别越高
<intent-filter android:priority="800">

不过,像电话这种播放可能优先级别系统应该是最高的,也有可能不同的手机系统内核经过修改会有不同的效果。

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧