0

我希望从设置之日起每周进行一次通知。它在被调用时初始化,但不是第二次。(我快速转发电话时钟以查看它是否会调用它,但它没有)。它必须是 7*calendar.getTimeInMillis()。我还能如何将其设置为每周一次?

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.HOUR_OF_DAY, mHour);
        calendar.set(Calendar.MINUTE, mMinute);
        AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, OnBootReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
        //am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

        am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 7*calendar.getTimeInMillis(), pendingIntent);

广播接收器类:

    nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence from = "from";
CharSequence message = "message";
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, new Intent(), 0);
Notification notif = new Notification(icon, tickerText, when);
notif.setLatestEventInfo(context, from, message, contentIntent);
nm.notify(1, notif);
4

2 回答 2

1

7*calendar.getTimeInMillis()确实是问题,因为calendar.getTimeInMillis()返回 1970 年以来的时间,所以你基本上将重复设置为~42.5 * 7年后。您需要设置偏移量,例如7 (days) * 24 (hours) * 60 (minutes) * 60 (seconds) * 1000 (millies)

在我们清除之后 - 我建议您避免使用重复,而是在每次调用的代码完成其工作时设置一个新警报,因为重复机制可能存在一些问题。

于 2012-05-11T16:38:18.987 回答
0

你不想要当前日期 * 7 你想要:

7 天 = 604 800 000 毫秒

这是7 天的毫秒数

IE

 am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 604800000L, pendingIntent);
于 2012-05-11T16:39:10.477 回答