【发布时间】:2018-05-21 01:37:42
【问题描述】:
我已经查看了许多其他具有类似问题的问题的解决方案,但我无法弄清楚我的代码有什么问题。我知道 LocalBroadcast 是一种流行的方式来做到这一点,我已经花时间尝试实现它。目前,接收者没有在我的清单中声明,但据我了解,这就是 register 行的用途。
在我的活动中:
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("MyActivity", "onReceive");
String action = intent.getAction();
int current = intent.getIntExtra("test", 0);
Toast.makeText(MyActivity.this, current.toString(), Toast.LENGTH_LONG).show();
}
};
@Override
public void onResume() {
super.onResume();
Log.d("MyActivity", "onResume()");
LocalBroadcastManager.getInstance(MyActivity.this).registerReceiver(
mMessageReceiver, new IntentFilter("currentUpdate"));
}
@Override
protected void onPause() {
Log.d("MyActivity", "onPause()");
LocalBroadcastManager.getInstance(MyActivity.this).unregisterReceiver(mMessageReceiver);
super.onPause();
}
在服务中我定义了一个方法:
private void sendNewBroadcast(Intent intent, int current){
intent.putExtra("test", current);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
Log.d("MyService", "new Broadcast sent from service");
}
我在服务的其他地方也这样使用它:
Intent intent = new Intent("currentUpdate");
sendNewBroadcast(intent, 5);
我已经调试过了,除了“接收”部分外,一切似乎都在工作。我错过了什么吗?该服务在不同的活动中启动并且正在进行中。
【问题讨论】:
-
您在
new Intent("test")中对Intent–"test"设置的操作与IntentFilter–"currentUpdate"上的操作不匹配。 -
@MikeM 你是对的,我已经改变了它,不幸的是没有区别。 OnReceive 仍未触发
-
通过该设置,您的
Activity需要在发送广播时在前台运行。是吗? -
另外,
LocalBroadcastManager不能跨进程工作。Activity和Service是否在同一个进程中运行?也就是说,是否在清单中的元素上指定了process属性? -
@MikeM,做到了。我不知道他们必须在同一个进程中运行,它现在正在工作。如果您添加它,将接受您的答案。谢谢!
标签: android broadcastreceiver broadcast