我的应用程序中的共享首选项出现了奇怪的情况。我正在使用Firebase消息传递服务,每当收到消息时,我都希望在共享首选项中将布尔值设置为true。
这是一个简单的代码我很喜欢:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
getApplicationContext().getSharedPreferences(ApplicationConstants.SHARED_PREFRENCES_KEY, MODE_PRIVATE).edit().putBoolean(getString(R.string.badge_settings_key), true).apply();
}
我稍后在我的一个活动中访问此布尔值。如您所见,我为此方法中的布尔值设置了true。
奇怪的是,当我的应用程序处于forground(其中一个活动是可见的)时,这非常有效,每当我访问此值时,它仍然是真的。但是,当我的应用程序处于后台并收到消息时,该值仍为false,不会更改。服务将无法正确触发,或者共享首选项文件无法正确保存。
我该怎么做才能解决这个问题?
答案 0 :(得分:1)
onMessageReceived
。
在您的情况下发生了什么,您收到了通知但是方法onMessageReceived
从未被调用过,而且SharedPref会将您作为任何布尔变量的默认值给出false。
解决方案: 请勿从Firebase控制台发送通知,请使用其API。
修改强>
您不得在请求中放入json密钥“通知”,以使其在应用程序的所有三种情况下都位于onMessageReceived
:前景,背景和被杀。