具有隐式意图的父活动

时间:2015-05-12 12:56:31

标签: android android-intent android-activity intentfilter

我在manifest中成功使用了属性android:parentActivityName,以便在推送通知启动另一个活动(活动B)时设置父活动(活动A)。然后,如果我回去,我会导航到活动A.

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

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

清单块:

<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 :(得分:0)

摘自开发人员文档:https://developer.android.com/training/implementing-navigation/ancestral

使用新的后堆栈进行导航 如果您的活动提供了任何允许其他应用启动该活动的intent filters,则应实施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 属性(和相应的元素)。

答案 1 :(得分:-2)

如开发人员网站中所述,“指定您的父活动功能”在API级别16中提供。

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

并且它还指出,对于较低的api,android提供了支持库。

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

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

您还可以看到此post.