Android - Build a notification, TaskStackBuilder.addParentStack not working

前端 未结 11 2578
说谎
说谎 2020-11-28 06:23

I\'m trying to launch an activity from a notification like the Android docs explain, but when I open the notification and then press the back button, the HomeActivity (paren

相关标签:
11条回答
  • 2020-11-28 06:26

    You need to add the parent stack for the activity you're launching, not the parent of it.

    Replace:

    stackBuilder.addParentStack(MainActivity.class);
    

    with:

    stackBuilder.addParentStack( MatchActivity.class );
    

    This assumes that you've defined the parent in your Manifest (API 16+):

    <activity android:name=".MatchActivity"
        android:parentActivityName=".MainActivity"
        ... />
    

    If you're developing for under API 16, then you have to define the parent as:

    <activity android:name=".MatchActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>
    
    0 讨论(0)
  • 2020-11-28 06:27

    For me the stackBuilder.addParentStack didn't work.

    I end up doing this, hope this could helps you.

        Intent intent = new Intent(context, MatchActivity.class);
    
        TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
        // Adds the back stack for the Intent
        stackBuilder.addNextIntentWithParentStack(new Intent(context, MainActivity.class));
        stackBuilder.addNextIntent(intent);
        PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    
    0 讨论(0)
  • 2020-11-28 06:32

    I had the same problem! Solve:

    switch to

    PendingIntent resultPendingIntent = 
    
    PendingIntent.getActivity( this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
    PendingIntent resultPendingIntent = 
    
    stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
    
    0 讨论(0)
  • 2020-11-28 06:35

    If you use code generation in your project (like Dagger) the MainActivity.class should be replaced with the MainActivity_.class (or whatever your parent activity name is). Took me a whole day to figure this out. Hope this can save someone's day.

    0 讨论(0)
  • 2020-11-28 06:41

    Using TaskStackBuilder didn't solve my problem and works only for Honeycomb and greater. So I take the following solution (please, don't crucify me):

    1. Call MainActivity instead of MatchActivity, passing MatchActivity as argument (by Intent).
    2. In MainActivity.onCreate, start the MatchActivity if the parameter is available.

    New code:

    Intent resultIntent = new Intent(context, MainActivity.class) //
            .putExtra(MainActivity.ACTIVITY_EXTRA, MatchActivity.class.getName()) //
            .putExtra("Pass extras to MatchActivity", "if you want! :)");
    
    PendingIntent pendingIntent = PendingIntent.getActivity(context, visitId, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    
    Notification notification = new NotificationCompat.Builder(context) //
                .setContentIntent(pendingIntent) //
                .build();
    

    On MainActivity:

    public static final String ACTIVITY_EXTRA = "activity";
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getIntent().getStringExtra(ACTIVITY_EXTRA) != null) {
            startActivity(new Intent(getIntent()).setClassName(this, getIntent().getStringExtra(ACTIVITY_EXTRA)));
        }
        ...
    }
    
    0 讨论(0)
  • 2020-11-28 06:42
    Intent resultIntent = new Intent(App.getContext(), TargetActivity.class);
    Intent backIntent = new Intent(App.getContext(), ParentActivity.class);
    backIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    final PendingIntent resultPendingIntent = PendingIntent.getActivities(
                                        App.getContext(), 0, 
                   new Intent[]{backIntent, resultIntent}, PendingIntent.FLAG_ONE_SHOT);
    mNotifyBuilder.setContentIntent(resultPendingIntent);
    

    this solved my problem with Parent stack on Notification Click

    0 讨论(0)
提交回复
热议问题