繁体   English   中英

Android活动意图启动

[英]Android activity intent launching

我在一个愚蠢的问题上呆了几个小时。

我的应用程序由2个活动组成:A(主)和B。还有一个服务S。“正常”任务堆栈是AB,S在后台运行。

我想通过通知直接到达活动B时出现我的问题。 我必须构造任务堆栈以获得AB才能保留返回按钮的默认行为。 (我希望用户可以回到A)。

因为我已经使用了API 7,所以无法使用intent数组,如android开发人员教程http://developer.android.com/guide/topics/ui/notifiers/notifications.html中所示 因此,我决定在通知发送的意图中添加自定义操作(S.ACTION_CUSTOM),以便在活动A的onCreate()中区分这种情况。

与服务S中声明的通知相关的意图:

Intent notificationIntent = new Intent(this, A.class);
       notificationIntent.setAction(ACTION_CUSTOM);

现在在A中,在onCreate()方法的末尾,添加:

if (S.ACTION_CUSTOM.equals(getIntent().getAction())) {
        Intent intent = new Intent(this, B.class);
        intent.setAction(S.ACTION_CUSTOM);
        startActivity(intent); 
 }

这段代码可以直接从通知中转到B,并授权返回到A。但是一旦我使用了通知“ shorcut”,则在应用程序启动时就可以直接到达B,即使从主菜单也可以。 我已经尝试了很多事情来了解发生了什么,但是即使我在A的if语句的末尾添加了getIntent()。setAction(ANYTHING),其行为也是一样的。

谁能告诉我我的代码发生了什么? Morover我对其他方法持开放态度,以实现自己的愿望。

谢谢。

编辑:

XML清单的一部分:

<activity
        android:name=".A"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>
<activity
        android:name=".B"
        android:label="@string/app_name" >
</activity>

但是我认为意图过滤器与我的问题无关。

通过更多的测试,我找到了原因和解决方案。

实际上,当我说我从主菜单重新启动该应用程序时,这不是事实。 我从“最近的活动”(长按主页)中重新启动了它。 但是,在这种情况下,似乎android会以运行它的最后意图启动应用程序。 因此,它可以在家中正常工作(因为使用Intent.ACTION_MAIN的新意图被触发),但不能用于最近的活动,因为具有与先前相同动作的意图被反复触发(在我的情况下为ACTION_CUSTOM)。

为了区分意图与“近期活动”和“通知”,我使用了标志。 对于最近的活动,该意图具有标志Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY。

因此,我通过在if语句中添加条件来修复代码:

if (S.ACTION_CUSTOM.equals(getIntent().getAction()) && (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == 0) {
        startActivity(getIntent().setClass(this, B.class));  
}

我的实际代码稍微有点复杂,有4个活动,而不是2个活动,但是一切正常,每个活动都将意图传达给下一个活动。 堆栈构建良好,当用户从通知以外的其他位置启动应用程序时,将保留默认行为。

希望这可以帮助某人避免浪费时间去理解为什么意图似乎很疯狂。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM