我正在开发一个使用FCM在后台接收通知的android库。点击通知后,应将用户重定向到上一个打开的活动-而不是启动活动。我使用标志FLAG_ACTIVITY_NEW_TASK
完成此操作,并且该应用在两种情况下均按预期工作:1.如果直接在android studio中通过USB构建应用,则2.如果下载并安装了.apk应用程序,终止该应用程序,然后重新启动它。
但是,如果我将应用程序安装为.apk,则会出现以下现象:
1。。该应用会在启动活动A上打开。
2。。我导航到活动B并将应用程序置于后台
3。。我收到一条通知,然后点击它。该应用程序在活动A上打开,而不是在预期的活动B上打开。
我不了解将应用程序安装为apk和通过usb安装它之间的区别。使FLAG_ACTIVITY_NEW_TASK
像单独活动一样对待活动是否有所不同?这是我的代码:
Intent packageIntent = applicationContext.getPackageManager().getLaunchIntentForPackage(packageName);
String mainClassName = packageIntent.getComponent().getClassName();
Intent intent = new Intent(applicationContext, NotificationTapService.class);
(请注意,我之所以要设置一个中间意图来启动服务以重新打开上一个活动,是因为该服务还调用了一些不相关的分析功能)
PendingIntent pendingIntent = PendingIntent.getService(applicationContext, requestCode, intent, PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder notificationBuilder =
new NotificationCompat.Builder(applicationContext, applicationContext.getString(R.string.channel_id))
.setSmallIcon(notificationResourceId)
.setContentTitle(messageTitle)
.setContentText(messageBody)
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(messageBody))
.setSound(defaultSoundUri)
.setVibrate(new long[] {1000, 1000, 1000, 1000, 1000})
.setLights(Color.BLUE, 3000, 3000)
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setPriority(NotificationCompat.PRIORITY_MAX);
NotificationManager notificationManager = (NotificationManager) applicationContext.getSystemService(applicationContext.NOTIFICATION_SERVICE);
notificationManager.notify(messageId, notificationBuilder.build());
(在Back Stack顶部设置重新打开活动的意图)(来自NotificationTapService)
Intent activityIntent = new Intent(applicationContext, Class.forName(intent.getExtras().getString(CLASS_NAME)));
activityIntent.setAction(Intent.ACTION_MAIN);
activityIntent.addCategory(Intent.CATEGORY_LAUNCHER);
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(activityIntent);
答案 0 :(得分:0)
您尝试使用属性android:launchMode="singleTask"
的此链接[Resume application and stack from notification