如何在Android应用程序处于后台或关闭时保持通知中的数据

时间:2017-09-20 15:21:06

标签: java android firebase notifications

我需要帮助。正如我在标题中所写的那样,我不知道如何在数据到达时保留数据,并且应用程序处于后台或被杀死。我需要通过的代码(下面的代码)是一个我需要详细说明的板块。这是代码:

public class MyFirebaseMessagingService extends FirebaseMessagingService {

private static final String TAG = "MyFirebaseMsgService";

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
   String text= remoteMessage.getNotification().getBody();
    SharedPreferences s = getSharedPreferences(Constants.PREFS_NAME, Context.MODE_PRIVATE);
    Functions.putStringInPrefs(s, Constants.PREFS_ALERT_PLATE, text);


    if (Functions.isUserSignedUp(this)) {

        if (remoteMessage.getNotification() != null) {
            // Log.d(TAG, "Message Title:" + remoteMessage.getNotification().getTitle());

            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
            try {
                sendNotification(remoteMessage.getNotification());
            } catch (Exception e) {
                e.printStackTrace();
            }


        }


    }
}

private void sendNotification(RemoteMessage.Notification notification) {
    Intent intent = new Intent(this, FragmentChangeActivity.class);
    String prova = notification.getBody();



    intent.putExtra("alert_plate" , prova);
    GlobalData.alertPlate=prova; // object used as cache
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    if(notification.getTitle()!= null){
        new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.details_icon).setContentTitle(notification.getTitle());

    } else{
        new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.details_icon).setContentTitle(getString(R.string.app_name));
    }

    new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.details_icon).setContentText(notification.getBody())
            .setAutoCancel(true)
            .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

    notificationManager.notify(new Random().nextInt((100000000 - 1) + 1) + 1, new NotificationCompat.Builder(this)
            .setSmallIcon(R.drawable.details_icon).build());



   }


}

我需要改变什么?谢谢 ! PS。在清单中,类以正确的方式声明。

1 个答案:

答案 0 :(得分:0)

有两种类型的FCM消息

1)通知消息 2)数据信息

因此,如果您想在应用关闭时接收数据,则必须使用数据信息发送数据。您的数据格式将如下所示

{
    "to": "device_id",
    "data": {
        "param_1": "vale 1",
        "param_2": "value 2",
        "param_3": "Value 3"
    }
}

现在收到消息后,您可以根据需要将数据存储在共享首选项或数据库中。