Android 具有隐含意图的父活动

Android 具有隐含意图的父活动,android,android-intent,android-activity,intentfilter,Android,Android Intent,Android Activity,Intentfilter,例如,我在清单中成功地使用了属性android:parentActivityName,以便在另一个活动(活动B)通过推送通知启动时设置父活动(活动A)。然后,如果我返回,我将导航到活动A 但是,它不适用于隐式意图。我在清单中为活动B声明了一个意图过滤器。当从应用程序外部启动活动B时,它似乎不会影响属性android:parentActivityName(或元数据android.support.PARENT_activity,具有较低的API) 在这种情况下,如何设置父活动 舱单块: <ac

例如,我在清单中成功地使用了属性android:parentActivityName,以便在另一个活动(活动B)通过推送通知启动时设置父活动(活动A)。然后,如果我返回,我将导航到活动A

但是,它不适用于隐式意图。我在清单中为活动B声明了一个意图过滤器。当从应用程序外部启动活动B时,它似乎不会影响属性android:parentActivityName(或元数据android.support.PARENT_activity,具有较低的API)

在这种情况下,如何设置父活动

舱单块:

<activity
        android:name="com.domain.app.activities.ActivityB"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateUnchanged"
        android:parentActivityName="com.domain.app.activities.ActivityA" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.domain.app.activities.ActivityA" />
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="http" android:host="domain.com" android:pathPattern=".*" />
        </intent-filter>
    </activity>

感谢您的帮助


谢谢

如开发人员站点“指定父活动功能”中所述,API级别16中提供了该功能

从Android 4.1(API级别16)开始,您可以通过在元素中指定Android:parentActivityName属性来声明每个活动的逻辑父级

它还声明,android为LowerAPI提供了支持库

如果您的应用程序支持Android 4.0及更低版本,请在应用程序中包含支持库,并在支持库中添加元素。然后指定父活动作为android.support.parent_活动的值,与android:parentActivityName属性匹配

以下是链接:


您还可以从开发者文档中看到这一点:

使用新的后堆栈向上导航 如果您的活动提供了任何允许其他应用启动活动的选项,则您应该实现回调,这样,如果用户在从另一个应用的任务输入您的活动后按下Up按钮,则您的应用将在向上导航之前启动具有相应后台堆栈的新任务

您可以通过首先调用来检查当前活动实例是否存在于其他应用程序的任务中来执行此操作。如果返回true,则使用构建新任务。否则,您可以使用如上所示的方法

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        Intent upIntent = NavUtils.getParentActivityIntent(this);
        if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
            // This activity is NOT part of this app's task, so create a new task
            // when navigating up, with a synthesized back stack.
            TaskStackBuilder.create(this)
                    // Add all of this activity's parents to the back stack
                    .addNextIntentWithParentStack(upIntent)
                    // Navigate up to the closest parent
                    .startActivities();
        } else {
            // This activity is part of this app's task, so simply
            // navigate up to the logical parent activity.
            NavUtils.navigateUpTo(this, upIntent);
        }
        return true;
    }
    return super.onOptionsItemSelected(item);
}
注意:为了使addNextEntWithParentStack()方法能够工作,您必须使用上述android:parentActivityName属性(以及相应的元素)在清单文件中声明每个活动的逻辑父级