无法同时接收广播 Activity
Unable to receive Broadcast In Same Activity
所以我在 android 学习了 BroadcastReceiver。 BroadcastReceivers 基于观察者设计模式(这使它们非常有趣)。
所以我想要实现的是广播我的消息并在 activity 内我想接收消息(仅用于测试目的)。
这是代码片段
Log.d("ABC", "sending");
Intent intent = new Intent("com.yourcompany.testIntent");
intent.putExtra("value", "test");
sendBroadcast(intent);
Log.d("ABC", "sent");
IntentFilter filter = new IntentFilter("com.yourcompany.testIntent");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("ABC","INSIDE ");
String value = intent.getExtras().getString("value");
}
};
Log.d("ABC", "receiving");
registerReceiver(receiver, filter);
Log.d("ABC", "received");
这是调试后的输出
04-06 20:40:52.446
20149-20149/com.example.illuminati.broadcastreceiver D/ABC: sending
04-06 20:40:52.447
20149-20149/com.example.illuminati.broadcastreceiver D/ABC: sent 04-06
20:40:52.448 20149-20149/com.example.illuminati.broadcastreceiver
D/ABC: receiving 04-06 20:40:52.453
20149-20149/com.example.illuminati.broadcastreceiver D/ABC:received
为什么它没有进入 onReceive() 方法
我在这里错过了什么
有帮助吗?
您在注册广播接收器之前发送您的广播消息。尝试按照以下方式进行操作,它会起作用:
IntentFilter filter = new IntentFilter("com.yourcompany.testIntent");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("ABC", "INSIDE ");
String value = intent.getExtras().getString("value");
}
};
registerReceiver(receiver, filter);
Intent intent = new Intent("com.yourcompany.testIntent");
intent.putExtra("value", "test");
sendBroadcast(intent);
如果您想在您的应用程序中广播消息(而不是向安装的每个应用程序),您还应该考虑使用 LocalBroadcastManager。参见 https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
所以我在 android 学习了 BroadcastReceiver。 BroadcastReceivers 基于观察者设计模式(这使它们非常有趣)。
所以我想要实现的是广播我的消息并在 activity 内我想接收消息(仅用于测试目的)。
这是代码片段
Log.d("ABC", "sending");
Intent intent = new Intent("com.yourcompany.testIntent");
intent.putExtra("value", "test");
sendBroadcast(intent);
Log.d("ABC", "sent");
IntentFilter filter = new IntentFilter("com.yourcompany.testIntent");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("ABC","INSIDE ");
String value = intent.getExtras().getString("value");
}
};
Log.d("ABC", "receiving");
registerReceiver(receiver, filter);
Log.d("ABC", "received");
这是调试后的输出
04-06 20:40:52.446 20149-20149/com.example.illuminati.broadcastreceiver D/ABC: sending 04-06 20:40:52.447 20149-20149/com.example.illuminati.broadcastreceiver D/ABC: sent 04-06 20:40:52.448 20149-20149/com.example.illuminati.broadcastreceiver D/ABC: receiving 04-06 20:40:52.453 20149-20149/com.example.illuminati.broadcastreceiver D/ABC:received
为什么它没有进入 onReceive() 方法
我在这里错过了什么
有帮助吗?
您在注册广播接收器之前发送您的广播消息。尝试按照以下方式进行操作,它会起作用:
IntentFilter filter = new IntentFilter("com.yourcompany.testIntent");
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("ABC", "INSIDE ");
String value = intent.getExtras().getString("value");
}
};
registerReceiver(receiver, filter);
Intent intent = new Intent("com.yourcompany.testIntent");
intent.putExtra("value", "test");
sendBroadcast(intent);
如果您想在您的应用程序中广播消息(而不是向安装的每个应用程序),您还应该考虑使用 LocalBroadcastManager。参见 https://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html