BroadcastReceiver & Intent
我们在工作的过程中,经常会使用到 BroadcastReceiver 机制,用来向活动发送消息,更新服务内的数据信息。但是我在这一过
程中发生了一个低级错误,我向广播发送两种 Action 类型的 Intent,结果始终接收不到,或者只能接收到一个 Intent 信息
预测效果:
进度条
但是实际:
进度条满了之后无法关闭:
进过排查后我发现了问题所在:
在广播注册的地方,我只为 Receiver 添加了修改进度条的 Action ,而没有添加打开、关闭窗口的 Action:
private fun iniBroadCast() {
val manager = LocalBroadcastManager.getInstance(this)
val broadcastReceiver = MyBroadcastReceiver(progressDialog)
val intentFilter = IntentFilter()
intentFilter.addAction(IntentManager.ACTION_TYPE_THREAD)
manager.registerReceiver(broadcastReceiver, intentFilter)
val intent = Intent(this, MyIntentService::class.java)
startService(intent)
}
可以看到 我只添加了 intentFilter.addAction(IntentManager.ACTION_TYPE_THREAD)
但是我在服务中,却是分两个 Action 发出的,如下 ⬇️
private void sendIfoToBroadCast(String serviceStatus){
Intent intent1 = new Intent(IntentManager.ACTION_TYPE_SERVICE);
intent1.putExtra(IntentManager.INTENT_STATUS_SERVICE, serviceStatus);
manager.sendBroadcast(intent1);
}
private void sendIfoToBroadCast(String serviceStatus, int progressStatus){
Intent intent = new Intent(IntentManager.ACTION_TYPE_THREAD);
intent.putExtra(IntentManager.INTENT_STATUS_SERVICE, serviceStatus);
intent.putExtra(IntentManager.INTENT_PROGRESS_SERVICE, progressStatus);
manager.sendBroadcast(intent);
}
所以错误原因就是我在为 BroadcastReceiver 进行组册时,少添加了 Action
解决
没啥难度加上就是:
private fun iniBroadCast() {
val manager = LocalBroadcastManager.getInstance(this)
val broadcastReceiver = MyBroadcastReceiver(progressDialog)
val intentFilter = IntentFilter()
intentFilter.addAction(IntentManager.ACTION_TYPE_SERVICE)
intentFilter.addAction(IntentManager.ACTION_TYPE_THREAD)
manager.registerReceiver(broadcastReceiver, intentFilter)
val intent = Intent(this, MyIntentService::class.java)
startService(intent)
}
如上,完美解决! 测试 Demo 地址:点击前往 https://github.com/FishInWater-1999/android_four_major_components
如果也解决了你的问题,不妨给个赞呗,么么哒~~