我在我的应用中使用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用作全局方式???所有活动???
答案 0 :(得分:3)
创建一个名为AbstractActivity的抽象活动。使所有其他活动扩展此抽象活动并在该抽象活动中声明broadCastReceiver。
public AbstractActivity extends Activity{....}
public SubActivity extends AbstractActivity{...}
或者您可以使用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
答案 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();
}
}
};
}
之后,您可以随时在应用程序级别执行任何操作,如现在的广播接收器。此外,您不会在活动中遇到任何内存泄漏。