gpt4 book ai didi

android - 如何更好地将数据从 BroadcastReceiver 发送到 Activity?

转载 作者:行者123 更新时间:2023-11-29 17:31:29 25 4
gpt4 key购买 nike

我想在我的应用程序中捕捉短信并在我的 View 中显示它。我创建 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 SMS 正文。现在我不知道我该怎么办

  1. 创建服务并将 SMS 传递给服务。并从服务获取短信
  2. 使用 Otto 观察器并从以下位置发送数据(短信): 1.广播接收器 2.服务并了解我的 Activity 。
  3. 另一种更正确的方式

如果我将使用 Otto(我想要它)在哪里更好地发送数据 - 从 BroadcastReceiver 或将数据传递给服务并从服务发送 otto 消息?

最佳答案

Otto 或 EventBus 对我来说是最简单的解决方案,也是最能反射(reflect)您的 Activity 生命周期的解决方案。

一个很好的开始是从 onPause()onResume 像这样注册/注销你的总线:

@Override
public void onResume() {
super.onResume();

BusProvider.getInstance().register(this);
}

@Override
public void onPause() {
super.onPause();

BusProvider.getInstance().unregister(this);
}

接下来,从您的 BroadcastReceiver 发布一个事件,例如 BusProvider.getInstance().post(new SmsEvent());

您的 fragment 或 Activity 将通过@Subscribe 方法和该方法的SmsEvent 参数类型接收事件。

这里似乎不需要任何服务,除非您想在 Activity 未打开时保存数据。

关于android - 如何更好地将数据从 BroadcastReceiver 发送到 Activity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32733377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com