AlarmAlertDialogActivity

AlarmAlertDialogActivity

我有一个从AlarmManager接收广播的应用程序。在此基础上,它启动一个透明的ActivityAlarmAlertDialogActivity),然后显示一个AlertDialog。在AlertDialog上单击Cancel将导致调用finish()
由于AlarmAlertDialogActivity不是从另一个Activity而是从一个广播接收器启动的,因此

Intent.FLAG_ACTIVITY_NEW_TASK

这意味着活动将在新任务中启动。
我的问题是,当取消AlertDialog(即按住home按钮并单击应用程序图标)后从最近的历史记录重新启动应用程序时,警报对话框将重新启动。我希望通过使用finish()/Intent标志可以避免这种情况;我希望发生的是Activity父活动启动之前的最后一次AlertDialog
我尝试过在启动Intent.FLAG_ACTIVITY_NO_HISTORY时将位掩蔽AlarmAlertDialogActivity作为附加标志,但这似乎没有什么区别。
bitmaskingIntent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS可以工作,但只能从最近的历史记录中删除应用程序(顾名思义)。这不利于用户体验。
那么,有没有可能得到我正在寻找的ui流?
更新-根据要求提供更多信息:
来自广播接收器的Logcat、AlertDialog活动和My Main活动:
    05-30 10:36:00.132: D/everyOtherApp(362): Received alarm broadcast at: Wed May 30 10:36:00 GMT+00:00 2012
05-30 10:36:00.262: D/everyOtherApp(362): AlarmAlertDialogActivity.onCreate()
05-30 10:36:00.912: D/everyOtherApp(362): AlarmAlertDialogActivity.onResume()
05-30 10:36:12.461: D/everyOtherApp(362): Cancel pressed

//Cancel exits the activity. I now relaunch the app from recent history:

05-30 10:36:20.233: D/everyOtherApp(362): AlarmAlertDialogActivity.onCreate()
05-30 10:36:21.621: D/everyOtherApp(362): AlarmAlertDialogActivity.onResume()

从广播接收器启动活动的代码:
        Intent intent = new Intent(new Intent(applicationContext, AlarmAlertDialogActivity.class));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra(Constants.SCHEDULED_ALARM_TAG, alarm);
    applicationContext.startActivity(intent);

manfest文件中的AlarmAlertDialogActivity:
    <activity
        android:name=".AlarmAlertDialogActivity"
        android:theme="@android:style/Theme.NoDisplay" >
    </activity>

最佳答案

我在另一个项目中做了类似的事情。我有一个广播接收器,它可以获取有关数据连接和SIM卡配置文件更改的信息,并显示一个对话框(使用与您类似的活动)警告用户他可能会招致费用。我最后做的是:
在清单中,在AlarmAlertDialogActivity的<Activity>标记中,添加以下内容:

android:excludeFromRecents="true"
android:noHistory="true"
android:taskAffinity=""

说明:将excludeFromRecentsnoHistory设置为“true”可确保活动不会显示在最近的应用程序列表中,而且一旦用户离开活动,他将无法返回(这可能是您想要的)。将taskAffinity设置为空字符串可确保AlarmAlertDialogActivity在其自己的任务中运行,即使在显示对话框时应用程序正在运行。
只要您有另一个活动作为您的应用程序的主要活动(即:使用action.MAINcategory.LAUNCHER的意图过滤器),这就可以解决您的问题。

08-03 19:12