我面临两种问题。一个是覆盖现有活动(当应用程序处于前台时)。其次是现有的活动没有被覆盖,也没有打开另一个相同的活动(当应用程序在后台时)。
我在后台有服务,当应用程序在前台时根据用户先前配置的某些规则触发活动(NotificationMessageActivity)。我的问题是,如果用户在第一次打开NotificationMessageActivity时设置了两个规则,如果服务触发另一个活动,则不会关闭现有活动,而是覆盖现有活动。有人可以让我知道如何保持活动或任何优雅的方式来处理这种情况?试过Intent.FLAG_ACTIVITY_MULTIPLE_TASK
但没有运气。以下是我的代码。
Intent intent= new Intent(this, NotificationMessageActivity .class);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("message",messageBody);
startActivity(intent);
以下是我的代码,当app在后台时,会在点击通知时打开一个活动。此处活动未打开,并且不会覆盖现有的活动。
Intent intent= new Intent(AppScreen.this, NotificationMessageActivity .class);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.putExtra("message",notificationMessage);
startActivity(intent);
答案 0 :(得分:0)
首先完成活动
Intent intent= new Intent(this, NotificationMessageActivity .class);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("message",messageBody);
startActivity(intent);
finish();
答案 1 :(得分:0)
如果您的应用程序位于前台,那么当您单击通知并调用挂起的意图时,将调用当前活动的onNewIntent()方法。在该方法中,您可以执行您想要执行的任何代码。
以下是发送通知的示例
private void sendNotification(String messageBody, String eventId, boolean isAppInBackground, String notificationType) {
Intent intent = new Intent(this, HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra(Constants.BUNDLE_BACKGROUND, isAppInBackground);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setContentTitle(getString(R.string.app_name))
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
在我的HomeActivity中,我正在检查app是否在后台并且单击了通知将调用该活动的OnCreate,如果app在前台并且单击onNewIntent(),则将调用该活动的方法。