gpt4 book ai didi

java - 将应用程序范围的 boolean 值保存在 SharedPreference 中

转载 作者:行者123 更新时间:2023-12-02 11:15:09 25 4
gpt4 key购买 nike

我知道这是一个常见问题,我花了整个下午尝试不同的解决方案,但似乎不起作用。

我试图在 SharedPreferences 中存储 boolean 值 receiveNotifications,但当我发送通知时它仍然会通过。当我检查 boolean 值是否在我设置的 Activity 中设置时,它表示该值应该是它应该的值,但是当我在我的 Firebase MessagingService 中调用它时,它仍然允许通知发送通过。

这是我第一次使用它们,所以如果您看到明显的答案,那就是原因。

存储 boolean 值:

// shared preferences
notificationsPref = mContext.getSharedPreferences("notifications", MODE_PRIVATE);
SharedPreferences.Editor editor = notificationsPref.edit();
editor.putBoolean("receiveNotifications", false);
editor.apply();

检查 boolean 值是否已设置:

// check if they want to receive notifications
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("notifications", MODE_PRIVATE);
Boolean areNotificationsAllowed = sharedPreferences.getBoolean("receiveNotifications", true);
if (areNotificationsAllowed){
Toast.makeText(this, "Send Notification", Toast.LENGTH_SHORT).show();
sendNotification(contentTitle, messageBody);
}

最佳答案

推送消息是一个 Json 对象,下一个示例直接来自文档:

{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"title":"Portugal vs. Denmark",
"body":"great match!"
}
}
}

推送消息有 3 种类型:通知、数据、两者;

  //Notification
"message":{
"notification":{
}
}

//data
"message":{
"data":{
}
}

//both
"message":{
"notification":{
},
"data":{
}
}

每个都会在应用程序中触发不同的行为,具体取决于应用程序是否打开。

  • 通知:如果应用程序打开,则将执行服务上的代码,如果没有打开,则默认显示通知

  • 数据:始终会执行服务上的代码

  • 两者:如果应用程序打开,则将执行服务上的代码,如果没有打开,则默认显示通知,并且数据将在启动器 Activity 中作为额外可从 Intent 获取的内容提供

Firebase Web 控制台将始终发送“通知”类型,如果您将数据添加为自定义参数,它将同时发送这两种类型。

如果应用程序关闭并且通知来自网络控制台,则永远不会考虑您的 boolean 值。

关于java - 将应用程序范围的 boolean 值保存在 SharedPreference 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50337205/

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