具有隐式意图的父活动

5
我成功地在清单文件中使用了 android:parentActivityName 属性,以设置父活动(活动A),当通过推送通知启动另一个活动(活动B)时。然后,如果我返回,我会导航到活动A。
然而,对于隐式意图,它不起作用。我在清单文件中为活动B声明了一个 intent-filter,但当从应用程序外部启动活动B时,似乎没有影响到 android:parentActivityName 属性(或具有较低 API 的 meta-data android.support.PARENT_ACTIVITY)。
在这种情况下,我该如何设置父活动?
清单文件块:
<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>

任何帮助都将不胜感激。
谢谢!
2个回答

0

来自开发者文档:https://developer.android.com/training/implementing-navigation/ancestral

使用新的返回堆栈向上导航 如果您的活动提供任何意图过滤器,允许其他应用程序启动该活动,则应实现onOptionsItemSelected()回调,以便如果用户在从另一个应用程序的任务进入您的活动后按下“向上”按钮,则您的应用程序将在导航向上之前使用适当的返回堆栈启动新任务。

您可以通过首先调用shouldUpRecreateTask()来检查当前活动实例是否存在于不同应用程序的任务中,从而实现此操作。如果返回true,则使用TaskStackBuilder构建一个新任务。否则,您可以像上面所示一样使用navigateUpFromSameTask()方法。

@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);
}

注意:为了让addNextIntentWithParentStack()方法正常工作,您必须在清单文件中声明每个活动的逻辑父级,使用上述描述的android:parentActivityName属性(和相应的元素)。


-2

如开发者网站所述,"指定父活动的功能"是提供在 API 级别 16 中的。

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

同时,还指出了针对较低 API 的 Android 提供支持库。

如果您的应用程序支持 Android 4.0 及更低版本,请在应用程序中包含 Support 库,并在 <activity> 元素内添加 <meta-data> 元素。然后将父活动指定为 android.support.PARENT_ACTIVITY 的值,并匹配 android:parentActivityName 属性。

此处是链接:http://developer.android.com/training/implementing-navigation/ancestral.html#SpecifyParent

您也可以查看此帖子


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接