我已在manifest中注册了BroadcastReceiver:
<receiver android:name=".OrderReceiver" android:permission="com.google.android.c2dm.permission.SEND" android:exported="true">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.gndp" />
</intent-filter>
</receiver>
在OrderReceiver类中我试图以这种方式广播收到的意图:
public class OrderReceiver extends BroadcastReceiver {
public void onReceive(Context mContext, Intent intent) {
if(intent.getAction().equals("com.google.android.c2dm.intent.REGISTRATION")) {
intent.setAction("com.gndp.device.REGISTERED");
mContext.sendBroadcast(intent); //BAZINGA
}
}
这个广播的意图(BAZINGA)是在这个类(OrderReceiver)中收到的,但不是在我想要接收它的另一个活动中。这是活动:
public class RegisterActivity extends Activity {
private BroadcastReceiver deviceRegisteredBroadcastReciever;
@Override
onCreate(){
...
deviceRegisteredBroadcastReciever = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//broadcast never reach here<----PROBLEM
}
}
@Override
onResume() {
...
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(mContext);
lbm.registerReceiver(deviceRegisteredBroadcastReciever, new IntentFilter("com.gndp.device.REGISTERED"));
}
}
尝试过很多事情,包括通过LocalBroadcastManager实例发送广播,在活动中使用内部类而不是BroadcastReceiver。
当OrderReceiver收到第一个广播并且它保持在前台时,RegisterActivity处于前台。
答案 0 :(得分:1)
您通过调用上下文类的 sendBroadcast 并尝试使用 LocalBroadcastManager 接收此广告,在OrderReceiver中发送全球广播。
您应该使用 LocalBroadcastManager 进行广播,或者使用 RegisterActivity 中的 Activity.registerReceiver 方法注册普通 BroadcastReceiver 。