2016-12-13 68 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()方法將被調用。