使用Broadcast Recceiver进行应用程序中的所有活动

时间:2017-04-05 08:46:47

标签: android broadcastreceiver broadcast

我在我的应用中使用BroadCast Receiver。我的应用程序中有很多活动。在MainActivity.java中使用广域卡接收器,如下所示:

private BroadcastReceiver smsReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Retrieves a map of extended data from the intent.
        final Bundle bundle = intent.getExtras();
        try {
            if (bundle != null) {

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};

我正在通知消息即将到来且MyActivity是焦点。 现在当我的其他活动聚焦时,我没有得到通知。 是否有一种常用的方式将BroadCast用作全局方式???所有活动???

3 个答案:

答案 0 :(得分:3)

创建一个名为AbstractActivity的抽象活动。使所有其他活动扩展此抽象活动并在该抽象活动中声明broadCastReceiver。

public AbstractActivity extends Activity{....}

public SubActivity extends AbstractActivity{...}

或者您可以使用EventBus:

EventBus

阅读完整的getting started guide

答案 1 :(得分:1)

  

是否有一种常用的方式将BroadCast用作全局方式?

您应该在BroadcastReceiver而非特定Activity

注册
<receiver
        android:name="com.example.android.NotificationReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <category android:name="com.example.android" />
        </intent-filter>
    </receiver>

第二种方式: 创建BroadcastReceiver的独立自定义类,并在所有Activity

的Base中注册/取消注册

答案 2 :(得分:1)

广播接收器始终是他们取消注册广播接收器的工具。

要解决您的问题,您必须在应用程序级别注册广播。

例如:

public MyApplication extends Application {

onCreate() {

// register broadcast receiver here

}

    private BroadcastReceiver smsReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Retrieves a map of extended data from the intent.
            final Bundle bundle = intent.getExtras();
            try {
                if (bundle != null) {
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };
    }

之后,您可以随时在应用程序级别执行任何操作,如现在的广播接收器。此外,您不会在活动中遇到任何内存泄漏。