警报管理器无法设置重复

时间:2014-09-27 01:40:25

标签: java android alarmmanager

我在Android中使用Alarm Manager时遇到了一些问题。

在onCreate方法中:

        notificationCount = notificationCount + 1;
        AlarmManager mgr = (AlarmManager) context
                .getSystemService(Context.ALARM_SERVICE);
        Intent notificationIntent = new Intent(context,
                ReminderAlarm.class);
notificationIntent.putExtra("NotifyCount", notificationCount);
        PendingIntent pi = PendingIntent.getBroadcast(context,
                notificationCount, notificationIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                60000+System.currentTimeMillis(), pi);

        ComponentName receiver = new ComponentName(context, BootReceiver.class);
        PackageManager pm = context.getPackageManager();

        pm.setComponentEnabledSetting(receiver,
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);

提醒警报类:

public class ReminderAlarm extends BroadcastReceiver {
private NotificationManager mNotificationManager;
private Notification notification;

@Override
public void onReceive(Context context, Intent intent) {
    mNotificationManager = (NotificationManager) context
            .getSystemService(Context.NOTIFICATION_SERVICE);
    PendingIntent contentIntent = PendingIntent
            .getActivity(context, 0, new Intent(), 0);
    notification = new Notification(
            R.drawable.ic_launcher, "Notification",
            System.currentTimeMillis());
    notification
            .setLatestEventInfo(context, "AlarmActivated", "Hello", contentIntent);
    mNotificationManager.notify(
            Integer.parseInt(intent.getExtras()
                    .get("NotifyCount").toString()),
            notification); }}

在启动接收器类中:

 public void onReceive(Context context, Intent i) {
    scheduleAlarms(context);
}

static void scheduleAlarms(Context context) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 1);
    AlarmManager mgr = (AlarmManager) context
            .getSystemService(Context.ALARM_SERVICE);
    Intent notificationIntent = new Intent(context, ReminderAlarm.class);
    PendingIntent pi = PendingIntent.getService(context, 0,
            notificationIntent, 0);

    mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,
            calendar.getTimeInMillis(),
            60000+System.currentTimeMillis(),
                pi);
}

在我的清单文件中:

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 <receiver android:name=".ReminderAlarm" >
    </receiver>
    <receiver
        android:name=".BootReceiver"
        android:enabled="false" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" >
            </action>
        </intent-filter>
    </receiver>

我正在尝试将闹钟设置为每分钟重复一次并提示用户通知。但它以这种方式工作:当我启动应用程序时,它会设置一次警报。在它提示通知一次后,它就停止了每一分钟的重复。

我想知道我的代码的哪一部分出了问题。提前谢谢。

修改

所以基本上我希望警报管理员每天早上12点重复一次。这是代码:

        Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.HOUR_OF_DAY, 0 );
    calendar.set(Calendar.MINUTE, 1);
        notificationCount = notificationCount + 1;
        AlarmManager mgr = (AlarmManager) context
                .getSystemService(Context.ALARM_SERVICE);
        Intent notificationIntent = new Intent(context,
                ReminderAlarm.class);
    PendingIntent pi = PendingIntent.getBroadcast(context,
                notificationCount, notificationIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        mgr.setRepeating(AlarmManager.RTC_WAKEUP,
                calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi);

        ComponentName receiver = new ComponentName(context, BootReceiver.class);
        PackageManager pm = context.getPackageManager();

        pm.setComponentEnabledSetting(receiver,
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);

因此,通过设置重复,它会像以前一样在44年之后运行吗?或者每天早上12点重复一次?

1 个答案:

答案 0 :(得分:1)

setInexactRepeating()方法中的第三个参数是以毫秒为单位的间隔。您将其设置为自1970年1月1日00:00:00.0 UTC加60000以来经过的毫秒数,使下一个预定事件在将来大约44年。按如下方式更改您的代码:

mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, 
    calendar.getTimeInMillis(), 60000, pi);