我的颤振应用程序正在使用电话包在前台和后台收听短信。在注册接收消息时,我使用了两种方法(一种用于前台,一种用于后台,根据电话包的要求,如下所示:
telephony.listenIncomingSms(onNewMessage: onMessage, onBackgroundMessage: onBackgroundMessage);
但是在这两种方法内部都调用了一个通用方法,该方法将最近收到的 SMS 保存到共享首选项中,如下所示:
onMessage(SmsMessage message) async {
...
saveLastMsg(message);
}
onBackgroundMessage(SmsMessage message) async {
...
saveLastMsg(message);
}
saveLastMsg(SmsMessage message) async{
SharedPreferences sp = await SharedPreferences.getInstance();
sp.setString("lastsmsbody", message.body??'');
}
在 App UI 中,我像这样获取 lastsmsbody:
SharedPreferences sp = await SharedPreferences.getInstance();
String body = sp.getString("lastsmsbody")??'';
我在 UI 中显示这个值。当应用程序在前台运行时,这工作正常。屏幕上的数据会随着消息的出现而更新。
问题是当应用程序在后台推送时。从日志中,我看到它仍然收到消息,并且仍然将其保存在首选项中。但是当我将应用程序带回前台时,它无法获取应用程序在 bg 中时保存的最新消息。sp.getString("lastsmsbody") 获取应用程序在前台时保存的旧消息。
我认为当应用程序位于 fg 和 bg 时,偏好可能会有所不同。但是,如果我终止应用程序并重新启动,sp.getString("lastsmsbody") 会返回应用程序在 bg 中时保存的最新消息正确。
有人能告诉我这里发生了什么吗?