用于Android的AlarmManager

用于Android的AlarmManager,android,notifications,alarmmanager,android-pendingintent,Android,Notifications,Alarmmanager,Android Pendingintent,在下面的代码中,它正在做我目前想要做的主要事情: -每小时在同一时间重复一次 是否有人可以验证我是否需要或我需要做什么来确保以下项目 (1) 警报最终将以一个月的天数为基础。只要在他们唤醒手机时关机(以节省电池)。这不是一小时或一分钟的具体时间。只有一天。如何做到这一点 (2) 如果活动被破坏或手机重新启动,我不确定AlarmManager是否保持清醒 (3) 最后,每次应用程序启动时都会重复此代码(从而覆盖任何现有的AlarmManager;这是一种正确的操作方式,还是我应该检查是否存在报警

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

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

(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);
}
在我的清单中的我的应用程序标记中:

编辑:


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

  • 将您的日程安排存储在某个地方,并提出一个日程安排算法,用于决定下次要启动
    AlarmManager
    的时间
  • 每次你收到闹钟时,安排一个新的
  • 通过捕捉
    boot_COMPLETED
    广播,在引导时启动
    AlarmManager
AlarmManager不会在重新启动的手机中持续存在。但是,它会在被Android调度程序终止的应用程序中持续存在。因此,您基本上需要:

  • 将您的日程安排存储在某个地方,并提出一个日程安排算法,用于决定下次要启动
    AlarmManager
    的时间
  • 每次你收到闹钟时,安排一个新的
  • 通过捕捉
    boot_COMPLETED
    广播,在引导时启动
    AlarmManager

谢谢你的回答。我已尝试实现清单中的第三个项目符号,并将上面的代码向底部更新。现在,我在每次设备重新启动时都会收到通知,而不是等待一小时的确切时间。对此有何想法?当然,你必须进行计算以确定何时安排警报!完成g进一步研究,我似乎需要制作一个单独的“引导接收器”当设备重新启动时给出这些计算结果。这正确吗?当然。这是标准做法。创建一个广播接收器,侦听启动消息并适当安排报警管理器。感谢您的回答。我已尝试实现清单中的第三个项目符号,并将上面的代码更新到bott嗯。现在我每次设备重新启动时都会收到一个通知,而不是等待确切的一分钟。对此有什么想法吗?当然,你必须进行计算以确定何时安排警报!做更多的研究,我似乎需要制作一个单独的“启动接收器”当设备重新启动时给出这些计算结果。这正确吗?当然。这是标准做法。创建一个广播接收器,监听启动消息,并适当安排报警管理器。
 <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>