Android:保持警惕,让用户必须回应

我的应用程序显示一个警告,用户必须在继续做其他事情之前做出回应。 我试图找出实现这个最好的方法。 使用一个活动的警报是不是很工作。

在我目前的实施中,警报是活动(A)。 当同一个包中的另一个活动启动并调用onStop时,它会使用FLAG_ACTIVITY_REORDER_TO_FRONT再次启动,以便始终位于堆栈顶部。 这与所描述的一样,除非活动A使用Theme.Dialog或Theme.Translucent。

修改日志:

Activity A created Activity A started Activity A resumed Activity A paused Activity B created Activity B started Activity B resumed Activity B gains window focus Activity A stopped Top activity in stack is Activity B, so Activity A relaunches itself Activity B paused Activity A started Activity A resumed 

堆栈中的顶级活动应该是活动A,但活动B仍然在前台。

另一个实现细节:我的应用程序不是用于电话,所以我不关心后退button,完成活动或与其他应用程序的交互。 不过,我同意在原则上我应该防止这样的问题,所以在我的代码中,我检查前面的活动是否来自同一个包(即从我们的代码库)。 这应该围绕干扰其他应用程序的理论问题。

有没有办法把活动A放在焦点上? 我明白这是一种不寻常的行为,但活动A必须保持在前台,直到故意结束。

我也接受有关完全不同和更好的方法的build议!

FWIW,我正在运行2.2。

(从http://groups.google.com/group/android-developers/browse_thread/thread/d46fd7d59abe15a0交叉发布,我们没有回应。)

Solutions Collecting From Web of "Android:保持警惕,让用户必须回应"

你不能这样做。 请不要这样做。 堆栈顶部的活动是具有input焦点的活动。 你正在尝试做什么从根本上打破了应该发生的用户交互。

平台普遍认为你所做的一切都是滥用它,而Android越来越多地在做这些事情,以防止这样的应用程序造成伤害。

那么,这是我想到的:

 public class ActivityA extends Activity { ... public void onStop() { super.onStop(); finish(); Intent i = new Intent(); i.setClass(getApplicationContext(), ActivityA.class); startActivity(i); } } 

ActivityAonStop()完成并立即重新启动。 您可能需要检查有关设备旋转的问题,但这种方法应该可行。

窗口焦点意味着活动B仍然处于其可见的生命周期中,因为它具有顶部具有半透明bg的活动A或类似于对话的活动。

窗口焦点并不意味着活动B在前台。 他们是不同的东西。

如果你不想要这个,那就不要使用这两个主题。