0

私は 2 つのクラスを持っていますAlarmService.class,ReminderActivity.class。AlarmService クラスは、現在の時刻がアラーム時刻に等しいときに ReminderActivity を呼び出します。たとえば、アラームを 3.01、3.02、3.03、3.04 PM に設定したとします。3.01 PM に最初の ReminderActivity を取得します。問題は、3.01 PM に来る ReminderActivity に取り組んでいるときに、3.02 PM ReminderActivity が既存のものを超えることです。3.01PM を完了した後、3.02PM ReminderActivity を表示する必要があります。3.03PM ReminderActivity は、3.02PM などを完了すると表示されます。これを達成する方法は?助けて。

前もって感謝します。

4

3 に答える 3

0

これを行うには2つの方法があります。

A. Activity launchModeに よると、 set を使用できますandroid:launchMode="singleInstance"。これは、アプリに含まれるスタックの数を気にする必要がない場合の簡単なケースです。Intent.FLAG_ACTIVITY_NEW_TASKサービスからフラグを追加することを忘れないでください。

B. スタックの数が問題になる場合は、次のことを行うことができます。onCreate で登録し、onDestroy() で登録解除します。MyOrderedReceiver上記のアクティビティのみを作成するデフォルトの優先度で、Manifest.xml に別のブロードキャスト レシーバーを登録します (それを と呼びましょう)。次に、アラームがトリガーされると、サービスから順序付きブロードキャストを送信します。sendOrderedBroadcast(new Intent("myAction"));

アクティビティがすでに作成されている場合は、受信側で最初にインテントを処理し、インテントを中止して、MyOrderedReceiverから送信されたインテントを処理しないようにしAlarmServiceます。アクティビティがスタックにない場合、MyOrderedReceiver は ReminderActivity を開始してインテントを処理します。

オプション B が便利で、さらに必要な場合は、これに関する実装の詳細を投稿できます。

于 2013-06-12T09:42:58.310 に答える
0

アクティビティがアラーム サービスから初めて起動される場合は、ブール値を sharedpreferences プロパティに保存します。

この値が true の場合、次のアラーム イベントに対して次のことができます。

  • AlarmService で、データを SQLite データベースに保存します。現在のアクティビティが完了した場合 (ユーザーが [完了]、[OK] などのボタンを押した場合)、新しいデータをロードして同じアクティビティを再度開始できます。
  • 同じアクションを共有して、ReminderActivity のブロードキャストレシーバーレジスターにインテントを送信します。アクティビティは、ユーザーに何をすべきかを尋ねるダイアログを生成します。
  • AlarmService から通知を生成します。

私があなただったら、通知を使用し、ユーザーはどちらを起動するかを決定できます。

于 2013-06-12T09:33:27.480 に答える
0

作る

android:launchMode="singleTask"

マニフェストで。これにより、ReminderActivity のインスタンスが 1 つだけ作成されるようになります。3:01、3:02 などを処理する方法を実装するには、アクティビティで onNewIntent() 関数を定義します。

よろしくお願いします

于 2013-06-12T09:21:50.540 に答える