家长活动 – 在Android上

在我的应用程序中收到通知后,点击它打开活动B.活动B有一个父活动A.这里是清单:

<activity android:name="com.evapp.activities.B" android:label="@string/title_activity_B" android:parentActivityName="com.evapp.activities.A" android:screenOrientation="portrait" > <!-- Parent activity meta-data to support 4.0 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.evapp.activities.A" /> </activity> 

在活动BI中启用了向上function(左箭头靠近活动行为的酒吧图标),这里是代码:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getActionBar().setDisplayHomeAsUpEnabled(true); ... 

问题是,如果通过点击通知打开活动B(活动A不是带来活动B的活动),当点击图标时,应用程序closures。 我想打开它的父母活动,答:可能吗? 或者我应该使用startActivity()从活动B?

更新1-我已经添加了这个代码:

 @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: Intent upIntent = NavUtils.getParentActivityIntent(this); if (NavUtils.shouldUpRecreateTask(this, upIntent)) { TaskStackBuilder.create(this) .addNextIntentWithParentStack(upIntent) .startActivities(); } else { NavUtils.navigateUpTo(this, upIntent); } return true; 

谢谢

Solutions Collecting From Web of "家长活动 – 在Android上"

您需要设置用于构buildNotificationPendingIntent ,启动新的任务,并向PendingIntent提供back stack以实现应用程序的正常Up行为。

 Intent resultIntent = new Intent(this, SecondActivity.class); TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); // All the parents of SecondActivity will be added to task stack. stackBuilder.addParentStack(SecondActivity.class); // Add a SecondActivity intent to the task stack. stackBuilder.addNextIntent(resultIntent); // Obtain a PendingIntent for launching the task constructed by this builder. PendingIntent pendingIntent = stackBuilder.getPendingIntent(REQUEST_CODE, PendingIntent.FLAG_UPDATE_CURRENT); NotificationManager manager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE); Notification notification = new Notification.Builder(this) .setContentTitle("My Notification") .setContentText("Notification content") .setSmallIcon(android.R.drawable.ic_menu_view) .setContentIntent(pendingIntent) .build(); manager.notify(NOTIFICATION_ID, notification); 

请阅读有关启动活动时保留导航的Android官方文档。 它build议采用上述方法。

我使用下面的代码,它像一个魅力。 试试吧!

 Intent upIntent = new Intent(getApplicationContext(), Home.class); if (NavUtils.shouldUpRecreateTask(this, upIntent)) { Log.d("ShowNotifications", "New Home"); TaskStackBuilder.create(this).addNextIntentWithParentStack(upIntent).startActivities(); } else { Log.d("ShowNotifications", "Old Home"); upIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); //upIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK ); startActivity(upIntent); finish(); } 

在单击通知时(不使用setContentView)创build要启动的临时活动。 在那里你可以决定要发起的活动。 取决于你的逻辑。

家长活动 – 在Android上

简单地说,您可以使用一些布尔参数来启动活动父活动,并且如果在活动b中设置了布尔参数,那么启动活动A.这样,两个活动都将活动在堆栈上或使用taskstackbuilder。

在使用TaskStackBuilder时 ,不要忘记在Manifest中添加Parent活动声明。

对于API 16 +:

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

对于API <16

 <activity android:name=".SecondActivity"> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> 

如果@Manish Mulimani的解决scheme为您工作,请随时忽略此信息。 它不适用于我,我没有尝试在OP中的代码,但这是一个替代解决scheme,如果这些都没有为你工作:

首先,与OP一样,在AndroidManifest.xml中指定父Activity:

 <activity android:name=".DetailActivity" android:label="@string/activity_detail" android:parentActivityName=".MainActivity" > <!-- Parent activity meta-data to support 4.0 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value=".MainActivity" /> </activity> 

然后,在您写入的代码中显示您的通知,请执行以下操作:

 /* The Intent you want to open when your notification is clicked */ Intent detailIntent = new Intent(context, DetailActivity.class); /* If you have some extras or a URI, set it here for the DetailActivity */ detailIntent.setData(todaysWeatherUri); /* * This Intent is the one that goes back to your MainActivity when the up * arrow or back button is clicked from the DetailActivity. */ Intent backToMain = new Intent(context, MainActivity.class); PendingIntent resultPendingIntent = TaskStackBuilder.create(context) .addNextIntentWithParentStack(backToMain) .addNextIntent(detailIntent) .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

我已经testing了这个开始每一个迭代的活动,我可以瘦,它完美的作品! 我希望它可以帮助你。

这里是我形成此解决scheme的Android文档的链接。