13

对我来说有点令人困惑的问题:

我有一个主屏幕小部件,当点击它时,会启动我的主应用程序活动,并在意图中添加一些额外内容:

Intent start = new Intent(context, Main.class);
start.putExtra("action", "showXYZ");
start.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(start);

这一切都很好,它开始了我的活动,我的活动按预期收到了额外的东西。它处理这些额外内容并开始另一个活动。

一旦用户单击主屏幕小部件并以这种方式启动主要活动,通过“最近的应用程序”方法进入应用程序(按住“主页”键)启动带有附加功能的主要活动 - 导致处理发生我不想要(并导致第二个活动打开,而不是只显示主要活动)。

有什么解决方法吗?从“最近的应用程序”方法启动应用程序时,我想简单地启动 Main 活动,而不需要最后一组附加功能。

非常感谢您的帮助!r3mo

注意:我在 android 1.5

编辑:

在这里找到了一种解决方法: Android 不断缓存我的 Intents Extras,如何声明一个挂起的 Intent 来保留新的 Extras?

我将为小部件触发的意图添加时间戳,并检查时间戳是否在 Main.java 中是最新的。如果是,我会继续处理。如果没有,我将只显示 Main.java 活动。

很想知道是否有任何官方解决方案。

4

3 回答 3

41

正如 Martijn 所说,您可以检查您的应用程序是否使用带有标志FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY集的 Intent 打开,如下所示:

int flags = getActivity().getIntent().getFlags();       
if ((flags & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
    // The activity was launched from history
}
于 2012-04-03T20:00:01.340 回答
11

我认为您可以通过检查 Intent 标志来区分“正常”启动和“最近的应用程序”启动;有一面旗帜叫

Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

其中,根据文档:

This flag is not normally set by application code, but set for you by the system if this activity is being launched from history (longpress home key).

因此,当设置此标志时,您可以选择忽略附加内容。

于 2011-04-11T15:12:10.670 回答
0

使用后,您应该清除意图中的额外内容。

Bundle extras = getIntent().getExtras();
if (extras == null) {
    return;
}
String value1 = extras.getString("Value1");
String value2 = extras.getString("Value2");
extras.clear();
于 2011-02-01T18:06:36.150 回答