从BroadcastReceiver到Activity的广播意图

时间:2014-05-28 18:54:11

标签: android android-intent broadcastreceiver

我已在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处于前台。

1 个答案:

答案 0 :(得分:1)

您通过调用上下文类的 sendBroadcast 并尝试使用 LocalBroadcastManager 接收此广告,在OrderReceiver中发送全球广播。

您应该使用 LocalBroadcastManager 进行广播,或者使用 RegisterActivity 中的 Activity.registerReceiver 方法注册普通 BroadcastReceiver