2016-12-13 71 views
0

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

  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. 下面是我的代码上的通知水龙头打开一个活动时,应用程序是在后台。在这里,活动不会被打开,并且不会触发另一个通知中的现有活动。

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

你试过在你的'AndroidManifest.xml'文件中为'NotificationMessageActivity'指定'singleTop' launchMode吗? –

+0

@PravinSonawane试过,没有工作 – rick

回答

0

先做完acivity

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(); 
+0

对不起,我认为你没有得到我的问题。我试图在不破坏当前活动的情况下从通知点击开另一个活动 – rick

+0

只需使用finish()函数 –

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我检查,如果应用程序是在后台和通知被点击的活动将被调用的OnCreate中,如果应用程序是在前台,并单击通知的例子该活动的onNewIntent()方法将被调用。