1

以下のコードでは、これまでのところ私が望んでいることの主なことを行っています: - 同時に1時間ごとに繰り返します

次の項目を確認するために何をする必要があるか、または何をする必要があるかを確認できますか?

(1) アラームは、最終的に月の日付に基づきます。(バッテリーを節約するために)電話をウェイクアップしたときにオフになる限り。時間または分に固有のものではありません。一日だけ。これはどのように達成できますか?

(2) アクティビティが破棄された場合、または電話が再起動された場合、AlarmManager が起動したままかどうかわかりませんか?

(3) 最後に、このコードはアプリが起動するたびに繰り返されます (したがって、既存の AlarmManagers を上書きします。これは適切な方法ですか、またはアラームが存在するかどうかを確認する必要がありますか?

 for (int i : AlarmDays) {

        if (String.valueOf(i) == null ) {
            continue;
        }

        Calendar cal = Calendar.getInstance();
        if (cal.get(Calendar.MINUTE) >= i)
            cal.add(Calendar.HOUR, 1);
        cal.set(Calendar.MINUTE, i);

        Intent intent = new Intent(this, TimeAlarm.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, i,
                intent, PendingIntent.FLAG_CANCEL_CURRENT);
        am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
                60 * 60 * 1000, pendingIntent);
    }

//  TimeAlarm.class
public void onReceive(Context context, Intent intent) {


    String DebtName = null;

    nm = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
    CharSequence from = "Payment Due";
    CharSequence message = "Open App and Update your Balance";
    Intent notificationIntent = new Intent(context, ManageDebts.class);
    notificationIntent.getExtras();
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
            notificationIntent, 0);
    Notification notif = new Notification(R.drawable.icon, "Pay "
            + DebtName + " today!", System.currentTimeMillis());
    notif.setLatestEventInfo(context, from, message, contentIntent);
    notif.defaults = Notification.DEFAULT_SOUND
            | Notification.DEFAULT_LIGHTS;
    nm.notify(1, notif);
}

そして、私のマニフェストのアプリケーションタグで:

編集:

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 <Application>        
  <receiver
        android:name=".TimeAlarm"
        android:enabled="true"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>
 </Application>
4

1 に答える 1

1

AlarmManager は、電話が再起動されるまで保持されません。ただし、Android スケジューラによって強制終了されたアプリケーション全体で持続しますこのため、基本的に次のことを行う必要があります。

  • スケジュールをどこかに保存し、次回いつAlarmManager発射するかを決定するためのスケジューリング アルゴリズムを考え出します。
  • アラームを受け取るたびに、新しいアラームをスケジュールします。
  • ブロードキャストAlarmManagerをキャッチして、オンブートを開始します。BOOT_COMPLETED
于 2012-06-10T16:17:36.740 に答える