多次打开同一活动

时间:2016-12-13 04:52:56

标签: android android-activity notifications

我面临两种问题。一个是覆盖现有活动(当应用程序处于前台时)。其次是现有的活动没有被覆盖,也没有打开另一个相同的活动(当应用程序在后台时)。

  1. 我在后台有服务,当应用程序在前台时根据用户先前配置的某些规则触发活动(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);
    
  2. 以下是我的代码,当app在后台时,会在点击通知时打开一个活动。此处活动未打开,并且不会覆盖现有的活动。

    Intent  intent= new Intent(AppScreen.this, NotificationMessageActivity .class);
    intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
    intent.putExtra("message",notificationMessage);
    startActivity(intent);
    

2 个答案:

答案 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(),则将调用该活动的方法。