首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android接收推送通知并在前台或后台处理

Android接收推送通知并在前台或后台处理
EN

Stack Overflow用户
提问于 2020-10-08 11:13:45
回答 1查看 144关注 0票数 1

我可以用FCM服务向我的应用程序发送推送通知。我是利用邮递员/失眠症来做的。

一切都很好。我能看到通知。但是,在处理传入的消息时,我需要一些建议/指出正确的方向。

我已经设置了所有使用FCM正式文档。

我的服务器调用如下所示:

代码语言:javascript
运行
复制
{
    "to":"...",
    "data" : {
        "sound" : "default",
        "body" :  "Message body",
        "title" : "My APP",
        "content_available" : true,
        "priority" : "high",
        "my_message": "123456"
    }
}

我可以访问onMessageReceived()方法中的数据:

代码语言:javascript
运行
复制
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    if (remoteMessage.getData().size() > 0) {
        // get incoming data    
    }
}

到目前为止还没有什么特别之处。我想要实现的是,如果我的活动在前台,我不需要显示任务栏通知,只需要显示活动中FCM消息( my_message键)附带的消息。这有可能吗?

如果应用程序是在后台,我想打开一个活动(我能做)并传递给我的意图,我的数据(上面的信息),这是我正在挣扎。

如果“后台应用程序”场景发生,我的通知将以如下方式显示:

代码语言:javascript
运行
复制
private void sendNotification(String messageBody) {
    Intent intent = new Intent(this, HomeActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);

    String channelId = "my_channel_id";
    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder =
            new NotificationCompat.Builder(this, channelId)
                    .setSmallIcon(R.drawable.ic_person)
                    .setContentTitle(getString(R.string.app_name))
                    .setContentText(messageBody)
                    .setAutoCancel(true)
                    .setSound(defaultSoundUri)
                    .setContentIntent(pendingIntent);

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

    // Since android Oreo notification channel is needed.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel channel = new NotificationChannel(channelId,
                "DG_Channel",
                NotificationManager.IMPORTANCE_DEFAULT);
        notificationManager.createNotificationChannel(channel);
    }

    notificationManager.notify(0, notificationBuilder.build());
}

所以我的三个主要问题是:

  • 当通知到达时,我能知道我的应用程序是否在前台/后台吗?
  • 如果在前台,如何访问活动中的数据?
  • 如果在后台,如何将数据传递给活动

谢谢你的建议

EN

Stack Overflow用户

回答已采纳

发布于 2020-10-08 14:14:11

要让应用程序了解传入的数据,请注册一个与活动生命周期相关联的BroadcastReceiver:查看这里

如果您的应用程序处于后台,您可以根据您的用例将其存储在数据库/ SharedPreferences中,并在每次打开应用程序时检查它是否存在。

关于确定您的应用程序是否在FG:这里

如果它在前台,发送一个自定义广播,您的活动一定会收到。

如果它在后台,存储它,并在下一次应用程序打开时使用它。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64261351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档