1

我正在从我的应用程序的 HelpActivity 启动 Google Play,如下所示:

Uri uri = Uri.parse("market://search?q=pub:\"Some Developer\"");
Intent playIntent = new Intent(Intent.ACTION_VIEW, uri);
playIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY 
                    | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);              
startActivity(playIntent);

就在执行此代码之前,我手动进入 Google Play,从第一页选择应用程序,然后选择当前功能的应用程序(在本例中为 Pandora)。这会在 Google Play 内部建立一个堆栈,如果在 Google Play 中按下后退按钮,将通过该堆栈返回。

运行上述代码时,Google Play 会出现并按预期导航到某些开发人员的应用程序列表。

问题是,当我按下后退按钮时,我会通过 Google Play 堆栈返回,访问 Pandora,然后是主应用程序页面,然后是 Google Play 的主页面,最后返回到我自己的应用程序(在第四次按下返回按钮)。

我想要发生的是让“后退”按钮将我直接带回我自己的应用程序,而将先前建立的 Google Play 应用程序堆栈保留为我的应用程序最初找到的堆栈。

我尝试了 Intent 标志的各种组合,但无济于事。

我应该补充一点,我的应用程序针对的是 API 8。

当用户在主活动的选项菜单上按下帮助时,HelpActivity 本身是从我的主活动启动的。这是执行该启动的代码:

.
.
.
else if(itemID == R.id.menu_help) {
  Intent helpIntent = new Intent(this, HelpActivity.class);
  helpIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  helpIntent.setAction(Intent.ACTION_MAIN);
  startActivity(helpIntent);
}

此外,HelpActivity 在我的应用程序清单中以不寻常的方式声明:

   <activity android:name="com.mycompany.HelpActivity"
              android:label="@string/app_help"
              android:configChanges="keyboardHidden|orientation|keyboard|locale|mcc|mnc|touchscreen|screenLayout|fontScale"
              android:launchMode="singleInstance"
              android:taskAffinity="com.mycompany.helpactivity"
              android:clearTaskOnLaunch="true"
              android:alwaysRetainTaskState="true"
              android:process=":fbhelp"
              android:stateNotNeeded="true"
              android:excludeFromRecents="true"
              >

其中一些属性似乎与此问题有关,这就是为什么我将这部分包含在清单中的原因。此活动在其自己的进程中运行,以避免在我的主应用程序中消耗堆。它被排除在最近,因为我不希望用户将它与我的应用程序分开。在用户多次启动它的情况下,它是 singleInstance 以防止不可见实例的累积。

我尝试了各种 Intent 标志,但似乎没有达到我想要的结果。

我发现这种异常行为在运行 Android 2.3.3 的 Nexus One 手机上可以可靠地重现。

我还在运行 Android 2.2.1、CyanogenMod-6.1.0-Droid 的 Moto Droid 上重现了它,并且异常行为也存在于那里。它运行的是 Android Market 应用程序,而不是 Google Play;我没有更新的计划,因为这是一个测试设备,大多数用户不会经历手动更新的过程。

我还在运行 Android 2.2.1、CyanogenMod-6.1.0-DS 的 G1 上复制了它,它也运行旧的 Android Market 应用程序。

但是,在我运行 2.3.3 的 GTablet 上完全没有它。因此,它可能在某种程度上是操作系统(CM7 的风格)或 GP 应用程序,是特定的,因此不太受普遍关注,尽管您可以看到有许多平台和设备展示了它。除非您碰巧拥有表现出异常的设备,否则其他人也可能难以复制。

请参阅下面的评论以进行进一步讨论。

4

0 回答 0