4

からブロードキャストを受信するアプリケーションがありますAlarmManager。これにより、透明なActivity( AlarmAlertDialogActivity) が開始され、AlertDialog. でキャンセルをクリックするとAlertDialog、 が呼び出されfinish()ます。

AlarmAlertDialogActivityは別Activityの放送受信機から起動されるのではなく、

Intent.FLAG_ACTIVITY_NEW_TASK

これは、アクティビティが新しいタスクで起動されることを意味します。

私の問題は、アプリをキャンセルした後AlertDialog(つまり、ホーム ボタンを押したままアプリのアイコンをクリックして)、最近の履歴からアプリを再起動すると、AlertDialog が再起動されることです。finish()/Intentフラグを使用することで、これを回避できることを期待していました。私がしたいのは、の親アクティビティが起動されるActivity前の最後です。AlertDialog

Intent.FLAG_ACTIVITY_NO_HISTORY起動時にビットマスキングを追加フラグとして試しましたAlarmAlertDialogActivityが、違いはないようです。

ビットマスキングIntent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTSは機能しますが、最近の履歴からアプリを削除する必要があります (名前が示すように)。これは、ユーザー エクスペリエンスに悪影響を及ぼします。

それで、私が探しているUIフローを取得することは可能ですか?

更新- 要求された詳細情報:

ブロードキャスト レシーバーからの Logcat、AlertDialog アクティビティ、およびメイン アクティビティ:

    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()

BroadcastReceiver から Activity を起動するためのコード:

        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>
4

1 に答える 1

7

私は別のプロジェクトで同様のことをしました。データ接続とSIMプロファイルの変更に関する情報を取得し、ユーザーに料金が発生する可能性があることを警告するダイアログを(あなたのようなアクティビティを使用して)表示するBroadcastReceiverがありました。私がやったことは次のとおりでした:

マニフェストの<Activity>AlarmAlertDialogActivityのタグに、次を追加します。

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

説明:設定excludeFromRecentsnoHistoryて「true」に設定すると、アクティビティが最近のアプリケーションのリストに表示されなくなり、ユーザーがそのアクティビティから離れると、そこに戻ることができなくなります(これはおそらくあなたが望むものです) )。空の文字列に設定taskAffinityすると、ダイアログが表示されているときにアプリケーションが実行されている場合でも、AlarmAlertDialogActivityが独自のタスクで実行されます。

アプリケーションのメインアクティビティとして機能する別のアクティビティがある限り(つまり、とのインテントフィルタを使用action.MAINcategory.LAUNCHER、これで問題が解決するはずです。

于 2012-05-30T14:16:57.407 に答える