Android 我希望一次只处理一个片段上接收到的消息
我的活动中有两个片段。我使用的是选项卡视图。我面临的问题是,每当我收到消息时,只有第二个片段在处理该消息,而不是第一个。有没有办法只强制当前片段处理消息 MessageChecker服务的代码:Android 我希望一次只处理一个片段上接收到的消息,android,android-fragments,sms,Android,Android Fragments,Sms,我的活动中有两个片段。我使用的是选项卡视图。我面临的问题是,每当我收到消息时,只有第二个片段在处理该消息,而不是第一个。有没有办法只强制当前片段处理消息 MessageChecker服务的代码: public class MessageChecker extends BroadcastReceiver { private static MessageListener mListener; @Override public void onReceive(Context co
public class MessageChecker extends BroadcastReceiver {
private static MessageListener mListener;
@Override
public void onReceive(Context context, Intent intent) {
Bundle data = intent.getExtras();
Object[] pdus = (Object[]) data.get("pdus");
for(int i=0; i<pdus.length; i++){
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
String message = smsMessage.getMessageBody();
mListener.messageReceived(message);
}
}
public static void bindListener(MessageListener listener){
mListener = listener;
}
}
public类MessageChecker扩展了BroadcastReceiver{
私有静态消息侦听器;
@凌驾
公共void onReceive(上下文、意图){
Bundle data=intent.getExtras();
Object[]pdus=(Object[])data.get(“pdus”);
用于(int i=0;i用于在特定片段上恢复消息。
1-例如,您可以在本地初始化BroadcastReceiver
mRegistrationBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Config.PUSH_NOTIFICATION)) {
// new push notification is received
String message = intent.getStringExtra("message");
}
}
};
2-在以下事件中未注册和注册
@Override
public void onResume() {
// by doing this, the activity will be notified each time a new message
arrives
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mRegistrationBroadcastReceiver,
new IntentFilter(Config.PUSH_NOTIFICATION));
super.onResume();
}
@Override
public void onPause() {
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mRegistrationBroadcastReceiver);
super.onPause();
}
我自己解决了这个问题,只需在对应于每个片段的特定任务的按钮中将侦听器添加到片段类中
谢谢你的帮助
@Override
public void onResume() {
// by doing this, the activity will be notified each time a new message
arrives
LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mRegistrationBroadcastReceiver,
new IntentFilter(Config.PUSH_NOTIFICATION));
super.onResume();
}
@Override
public void onPause() {
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mRegistrationBroadcastReceiver);
super.onPause();
}