2017-10-07 16 views
0

私はMainActivityMessageInboxActivityのアプリケーションを持っています。ユーザーがアプリケーションをバックグラウンドにしてメッセージを受け取った場合、私はローカル通知を表示します。ユーザーが通知をタップすると、現在実行中のMainActivityを再開します。しかし、私のテストでは、現在のMainActivityを破棄して、MessageInboxActivityを表示してから、戻るボタンを押すと新しいMainActivityが作成されます。 通知で既存のアクティビティを開く

private void SendLocalNotification() 
{ 
    var notificationID = 1; 

    var title = "New Message"; 
    var message = Constants.Message.NewMessageNotificationText; 
    var builder = new NotificationCompat.Builder(Application.Context); 
    builder.SetContentTitle(title); 
    builder.SetContentText(message); 
    builder.SetAutoCancel(true); 
    builder.SetSmallIcon(Resource.Drawable.pn_message_icon); 

    var mainIntent = new Intent(this, typeof(MainActivity)); 
    var finalIntent = new Intent(this, typeof(MessageInboxActivity)); 
    var stackBuilder = Android.Support.V4.App.TaskStackBuilder.Create(Application.Context); 
    stackBuilder.AddNextIntent(mainIntent); 
    stackBuilder.AddNextIntent(finalIntent); 
    var resultPendingIntent = stackBuilder.GetPendingIntent(0, (int)PendingIntentFlags.UpdateCurrent); 
    builder.SetContentIntent(resultPendingIntent); 

    var notificationManager = NotificationManagerCompat.From(Application.Context); 
    notificationManager.Notify(notificationID, builder.Build()); 
} 

MainActivity

LaunchMode=SingleTaskとして設定されています。

[Activity(Label = "MainActivity", Theme = "@style/MyTheme", 
      WindowSoftInputMode = SoftInput.AdjustPan, ScreenOrientation = ScreenOrientation.Portrait, 
      LaunchMode = LaunchMode.SingleTask)] 
public class MainActivity : BaseActivity 

どのように私は、既存のMainActivityではなく、新しいもののために破壊されるのを続行することができますか?私はいくつかの検索をして、私は正しく答えに従っていると思ったが、何も動作していないようだ。

答えて

1

文書activityを参照して、属性android:launchModeを検索することができます。

あなたがLaunchMode = LaunchMode.SingleTaskを使用してMainActivityの上部にSingleTaskに設定すると、あなたのMainActivityは(シングルトン別称)システムでインスタンスを1つだけ持つことが許されます。システムに存在するアクティビティインスタンスがある場合、タスク全体が保持され、インテントがonNewIntent()メソッドを通じて配信される間にインスタンスが一番上に移動されます。

このモードでは、をLaunchMode.SingleTopに設定します。発信者タスクのスタックの先頭に同じタイプのアクティビティインスタンスが既に存在する場合は、新しいアクティビティが作成されず、その代わりに、インテントは、onNewIntent()メソッドを通じて既存のアクティビティインスタンスに送信されます。

関連する問題