在下面的代码中,到目前为止,它正在做我想要做的主要事情:
-每小时重复一次

有人可以验证我是否或需要做些什么来确保以下各项?

(1)警报最终将基于每月的某几天。只要他们在唤醒手机时熄灭(以节省电池)。它不是小时或分钟特定的。只有一天。如何做到这一点?

(2)如果活动被破坏或电话被重启,我不确定我的AlarmManager是否保持清醒状态?

(3)最后,每次应用启动时都会重复此代码(从而覆盖所有现有的AlarmManager;这是否是正确的处理方式,还是应该检查是否存在警报?

 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);
}


在清单中的application标签中:

编辑:

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

最佳答案

AlarmManager将不会在重新启动的电话中持续存在。但是,它将在被Android调度程序终止的应用程序中持续存在。因此,您基本上需要:


将您的时间表存储在某个地方,并提出一个时间表算法,以决定您下次要触发AlarmManager的时间。
每次收到警报时,安排一个新警报。
通过捕获AlarmManager广播在启动时启动BOOT_COMPLETED

关于android - Android的AlarmManager,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10970229/

10-11 22:43