至于父活动 - 在Android上

vli*_*o20 11 android android-activity

在我的应用程序中收到通知后,单击它会打开活动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>
Run Code Online (Sandbox Code Playgroud)

在活动BI中启用了向上功能(活动操作栏图标旁边的左箭头),这里是代码:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    getActionBar().setDisplayHomeAsUpEnabled(true);
    ...
Run Code Online (Sandbox Code Playgroud)

问题是,如果通过点击通知打开活动B(活动A不是带来活动B的活动),则点击图标时关闭应用程序.我想打开它的父母活动,A.有可能吗?或者我应该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;
Run Code Online (Sandbox Code Playgroud)

谢谢

Man*_*ani 11

您需要设置PendingIntent用于构建的内容Notification,开始一个新任务,并提供PendingIntenta 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);
Run Code Online (Sandbox Code Playgroud)

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

  • 它似乎不适用于 Android 7.0 (Nexus 5X)。任何的想法 ? (2认同)