在SharedPreference中保存Application Wide布尔值

时间:2018-05-14 18:56:02

标签: java android sharedpreferences firebase-cloud-messaging

我知道这是一个常见的问题,我整个下午都在尝试不同的解决方案,而这些解决方案似乎无法发挥作用。

我正在尝试在SharedPreferences中存储一个布尔receiveNotifications,但是当我发送通知时,它仍然会通过。当我检查布尔值是否在我设置的活动中设置时,它表示该值应该是它应该是什么,但是当我在我的Firebase MessagingService中调用它时,它仍然允许通知。< / p>

这是我第一次使用它们,所以如果你看到明显的答案就是为什么。

存储布尔值:

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

检查布尔值是否已设置:

// 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);
}

3 个答案:

答案 0 :(得分:1)

推送消息是一个Json对象,下一个例子直接来自docs:

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

有3种类型的推送消息,通知,数据和两者;

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

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

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

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

  • 通知:如果应用程序已打开,则会执行服务上的代码,否则默认情况下会显示通知

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

  • 两者:如果应用程序已打开,则将执行服务上的代码,否则默认情况下会显示通知,并且数据将在启动器活动中可用,因为可以从意图中获取

Firebase网络控制台将始终发送&#34;通知&#34;类型,如果您将数据添加为自定义参数,它将发送两者。

如果应用程序已关闭且通知来自Web控制台,则永远不会考虑您的布尔值。

答案 1 :(得分:0)

 private SharedPreferences prefs;
 private SharedPreferences.Editor editor;


 prefs = getApplicationContext().getSharedPreferences("notifiactions", 
 MODE_PRIVATE);

 editor = prefs.edit();

 /////Assigning a Boolean///////////

editor.putBoolean("receiveNotifications", false);
editor.commit();

//Retrieving Boolean
 prefs = getApplicationContext().getSharedPreferences("notifications", 
 MODE_PRIVATE);
 bool = prefs.getBoolean("receiveNotifications", true);

   //Try replacing this with your code also
     if(bool){

     }

答案 2 :(得分:0)

事实证明,无论你做什么Firebase都必须覆盖你在应用程序中设置的内容。我发现这一点,而不是从Firebase控制台发送,我从我的网络服务器发送通知。通知已完全停止,共享首选项有效。