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
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>
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);
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);
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.
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):
MainActivity
instead of MatchActivity
, passing MatchActivity
as argument (by Intent).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)));
}
...
}
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