为了账号安全,请及时绑定邮箱和手机立即绑定

将数据从通知发送到活动类,而不重新启动意图

将数据从通知发送到活动类,而不重新启动意图

GCT1015 2022-09-28 15:31:02
我正在使用 FCM 将通知数据负载从我的服务器发送到我的设备。当应用程序关闭或在后台时,我强迫他们重新启动登录过程,这是我的文件。Initialize.classHere is the onMessageReceived handler I am currently using.@Overridepublic void onMessageReceived(RemoteMessage remoteMessage) {    super.onMessageReceived(remoteMessage);    Log.e(TAG, "A notification packet was received from Firebase.");    if (remoteMessage.getData() != null) {        Log.e(TAG, "Notification Type: DATA");        String title = remoteMessage.getData().get("title");        String body = remoteMessage.getData().get("body");        String image = remoteMessage.getData().get("image");        MyNotificationManager.getInstance(getApplicationContext()).displayNotification(title, body, image);    } else if (remoteMessage.getNotification() != null) {        Log.e(TAG, "Notification Type: NOTIFICATION");        String title = remoteMessage.getNotification().getTitle();        String body = remoteMessage.getNotification().getBody();        MyNotificationManager.getInstance(getApplicationContext()).displayNotification(title, body, "logo");    }}但是,当应用程序位于前台时,我将重新发送作为意向。问题是,当您第一次运行初始化时,它正在创建一个TimeSignOn令牌并登录/创建新会话。由于您在浏览应用程序时已经登录,因此这对我来说不再重要,我只需要向他们发送浏览器类应导航到的新页面,而无需重新启动类。Browser.classvoid displayNotification(String title, String body, String image) { .....    Class launchIntent = Browser.class;    if (isAppIsInBackground(context)) {        launchIntent = Initialize.class;    }    Intent intent = new Intent(context, launchIntent);    intent.putExtra("NOTIFICATION_PACKET", "CONTENT");    PendingIntent pendingIntent = PendingIntent.getActivity(mCtx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);    mBuilder.setContentIntent(pendingIntent);}有没有办法将有效负载信息发送到浏览器上的 onResume 运算符.class而不是传递 ,这样我就不需要重新加载整个活动?这导致的最大问题是它将多个浏览器活动堆叠到第一个上。intent.putExtra有没有更好的方法来检查活动是离线还是只是在后台?以下是我目前检查的方式
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

所以我找到了一种方法让它工作。不确定这是否是黑客攻击,但它的工作原理!


首先将 的安卓指南设置为以下内容:.Browser


android:launchMode="singleTask"

然后在我们添加以下方法Browser.class


@Override

protected void onNewIntent(Intent intent) {

    super.onNewIntent(intent);

    setIntent(intent);

}

最后,在 onResume 函数中,我们覆盖并添加了以下花絮


@Override

protected void onResume() {

    super.onResume();

    Intent intent = getIntent();

    if (intent.hasExtra("NOTIFICATION_PACKET")) {

        Log.e(TAG, "The following data was received from the notification packet: " + getIntent().getStringExtra("NOTIFICATION_PACKET"));

        getIntent().removeExtra("NOTIFICATION_PACKET");

    }

}

现在,我们可以使用数据包信息并立即销毁它,以便在重新启动应用程序时不会再次调用它。这会将应用保持在堆栈的顶部,并且在应用处于前台时不会重新启动它。:)


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 50 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信