如何更好地将数据从 BroadcastReceiver 发送到 Activity?
How better send data from BroadcastReceiver to Activity?
我想在我的应用程序中捕捉短信并在我的视图中显示。我创建 BroadcastReceiver:
public class SMSMonitor extends BroadcastReceiver {
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null && intent.getAction() != null && ACTION.compareToIgnoreCase(intent.getAction()) == 0) {
Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
SmsMessage[] messages = new SmsMessage[pduArray.length];
for (int i = 0; i < pduArray.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]);
}
StringBuilder bodyText = new StringBuilder();
for (SmsMessage message : messages) {
bodyText.append(message.getMessageBody());
}
String body = bodyText.toString();
Toast.makeText(context, body, Toast.LENGTH_LONG).show();
abortBroadcast();
}
}
}
它显示 Toast wuth 短信正文。现在我不知道该怎么办
- 创建服务并将短信传递给服务。并从服务中获取短信
- 使用 Otto 观察器并从以下位置发送数据(短信):
1.广播接收器
2.服务
赶上我的 activity.
- 另一种更正确的方式
如果我将使用 Otto(我想要它)在哪里更好地发送数据 - 从 BroadcastReceiver 或将数据传递到服务并从服务发送 otto 消息?
Otto 或 EventBus 对我来说是最简单的解决方案,也是最能反映您的 Activity
生命周期的解决方案。
一个好的开始是 register
/unregister
你从 onPause()
和 onResume
乘坐公共汽车,像这样:
@Override
public void onResume() {
super.onResume();
BusProvider.getInstance().register(this);
}
@Override
public void onPause() {
super.onPause();
BusProvider.getInstance().unregister(this);
}
接下来,post 来自您 BroadcastReceiver
的活动,例如 BusProvider.getInstance().post(new SmsEvent());
您的片段或Activity 将通过@Subscribe 方法和方法的SmsEvent
参数类型接收事件。
看来你不需要任何服务,除非你想在 activity 未打开时保存数据。
我想在我的应用程序中捕捉短信并在我的视图中显示。我创建 BroadcastReceiver:
public class SMSMonitor extends BroadcastReceiver {
private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null && intent.getAction() != null && ACTION.compareToIgnoreCase(intent.getAction()) == 0) {
Object[] pduArray = (Object[]) intent.getExtras().get("pdus");
SmsMessage[] messages = new SmsMessage[pduArray.length];
for (int i = 0; i < pduArray.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pduArray[i]);
}
StringBuilder bodyText = new StringBuilder();
for (SmsMessage message : messages) {
bodyText.append(message.getMessageBody());
}
String body = bodyText.toString();
Toast.makeText(context, body, Toast.LENGTH_LONG).show();
abortBroadcast();
}
}
}
它显示 Toast wuth 短信正文。现在我不知道该怎么办
- 创建服务并将短信传递给服务。并从服务中获取短信
- 使用 Otto 观察器并从以下位置发送数据(短信): 1.广播接收器 2.服务 赶上我的 activity.
- 另一种更正确的方式
如果我将使用 Otto(我想要它)在哪里更好地发送数据 - 从 BroadcastReceiver 或将数据传递到服务并从服务发送 otto 消息?
Otto 或 EventBus 对我来说是最简单的解决方案,也是最能反映您的 Activity
生命周期的解决方案。
一个好的开始是 register
/unregister
你从 onPause()
和 onResume
乘坐公共汽车,像这样:
@Override
public void onResume() {
super.onResume();
BusProvider.getInstance().register(this);
}
@Override
public void onPause() {
super.onPause();
BusProvider.getInstance().unregister(this);
}
接下来,post 来自您 BroadcastReceiver
的活动,例如 BusProvider.getInstance().post(new SmsEvent());
您的片段或Activity 将通过@Subscribe 方法和方法的SmsEvent
参数类型接收事件。
看来你不需要任何服务,除非你想在 activity 未打开时保存数据。