2017-07-12 26 views
0

からのactivityが届きましたので、notificationが届きます。 notificationを押すとactivityが起動します。 back-stackに以前のactivitiesがない場合、または特定のもののみがある場合は、その特定のactivityを削除して、そこに新しいアクティビティであるactivityを挿入します。通知から活動を開始した後の主な活動に戻る

このThreadが見つかりましたが、2つのインテントとフラグでどのように処理するのか分かりません。

すなわちintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK)

、それはそれを彼がそれをやったか、私はそのためのアクティビティスタックを編集する必要があります方法を行うことが賢明ですか?

私はかなりAndroidの開発者です。だから、いくつかのアドバイスが私を助けてくれました。 ありがとう;)

更新:私はstackbuilderを使用していましたが、何とか設定されていません...私のエラーは見つかりませんでした。ブーリアンのnoActivityは確かに設定されていますが、スタックが実際にそこに以前のアクティビティをどのように置いているのか誤解しました。

private void sendNotification(messageType type, Map<String, String> data, boolean noActivities) { 
    Intent i; 
    String message = ""; 

    switch (type) { 
     case newFOLLOWER: 
      User cur = new User(data.get("other.name")); 
      User.lookAT = User.getOtherUserByName(cur); 
      i = new Intent(this, other_profile.class); 
      i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      message = data.get("other.name") + " is following you now. Click to see his profile"; 
      i.putExtra("Notification", data.get("other.name") + " is following you now. Click to see his profile"); 
      break; 

     default: 
      i = null; 
      break; 
    } 

    if (i != null) { 
     TaskStackBuilder stack = TaskStackBuilder.create(this); 

     if(noActivities){ 
      stack.addParentStack(Photostream.class); 
     } 

     stack.addNextIntent(i); 

     PendingIntent pendingIntent = stack.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);//PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentTitle("PIC LOC") 
       .setContentText(message) 
       .setAutoCancel(true) 
       .setSound(defaultSound) 
       .setContentIntent(pendingIntent); 


     NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(0, notificationBuilder.build()); 
    } 

} 

アップデート2:だから、非常に多くのことを検索した後、私は、スタックビルダーがどのように機能するかmissunderstoodことが分かりました。追加の仕組みを説明した別のスレッドが見つかりました。 Editing the Manifest in order to have a previous stack

答えて

1

stack builderは、このような通知を作成するときに行う必要があります。

Intent resultIntent = new Intent(this, NotificationTapActivity.class); 
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
// Adds the back stack 
stackBuilder.addParentStack(MainActivity.class); 
// Adds the Intent to the top of the stack 
stackBuilder.addNextIntent(resultIntent); 
// Gets a PendingIntent containing the entire back stack 
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, 
PendingIntent.FLAG_UPDATE_CURRENT); 

ユーザが通知をタップすると、MainActivityがスタックに挿入されます。

NotoificationTapActivityのバックプレスを処理できるもう1つのソリューション。そこにあなたが現在の活動を終わらせることができ、そこからMainActivityを開始することができるかどうか確認することができます。

0

あなたは単に通知アクティビティのonBackPressedでそれを扱うことができる); は、私はあなたの男性のための

おかげで助けて...断食した、あなたはとても親切に私を提供するチュートリアルの一部をスキップ。

Intent intent =new Intent(context,MainActivity.class) intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);

0
/**Just use below code inside onMessageReceived()**/ 

PendingIntent pendingIntent; 
    Uri defaultSoundUri; 
    Intent notification_intent; 

String message = "Your Message"; 

notification_intent = new Intent(this, YourActivity.class); 
notification_intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

pendingIntent = PendingIntent.getActivity(this, 0 , notification_intent, PendingIntent.FLAG_ONE_SHOT); 
     defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(getNotificationIcon(notificationBuilder)) 
       .setContentTitle(this.getResources().getString(R.string.app_name)) 
       .setContentText(message) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND) 
       .setContentIntent(pendingIntent); 

    String[] multilineDescription = new String[]{message}; 

    message = multilineDescription[0]; 

    for (int i=1; i<multilineDescription.length; i++) 
    { 
     message += System.getProperty("line.separator"); 
     message += multilineDescription[i]; 
    } 

    notificationBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(message)); 

    /***Above commented is for strecting the big message in Push Notification******/ 

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify((int)MESSAGE_NOTIFICATION_ID /* ID of notification */, notificationBuilder.build()); 
1

あなたはTaskStackBuilderを使用する必要があります。

フラグの助けを借りて、あなたの通知アクティビティは、通知をクリックして開き、その後、onBackPressedで、次のようあなたのmainactivityに行くされていることを知っているかもしれません。これが最も効率的な方法であり、その理由のためにTaskStackBuilder構造が開発されました。

Push Notificationsが私のプロジェクトに含まれている場合、私はいつもTaskStackBuilderを使用します。

オーバーライドonBackPress()は、アプリケーションに複雑な構造が必要で、多くのことを処理する必要があるため、適切なアプローチではありません。

thisチュートリアルを確認してください。

0
Intent intent = getIntent();     
String data= intent.getStringExtra("from");            
if(data.equalsIgnoreCase("notificaton")           
{ 

// call Mainactivity 

}                    
else if(){} 
0

PendingIntentはマルチインテントを実装できます。配列の意図を作成するだけです

Intent[] intents = new Intent[2]; 
    Intent intent1 = new Intent(this, MainActivity.class); 
    Intent intent2 = new Intent(this, YourActivity.class); 
PendingIntent pendingIntent = PendingIntent.getActivities(this, 0, intents,PendingIntent.FLAG_ONE_SHOT); 

YouActivityを終了すると、MainActivityに戻ります。

関連する問題