android:每月设置闹钟

时间:2013-07-27 09:54:58

标签: java android alarmmanager

我正在开发一个Android应用程序,用于按月设置闹钟。我已经为下个月提供了以下代码。

private int GetTotalDays(int  monthRecvd1) {

    int totalDays=getDaysInMonthInPresentYear(taskMonth1);
    myDays=(totalDays-taskdate1)+taskdate1;
            }

                private int getDaysInMonthInPresentYear(int taskMonth1) 
                {
                    int days=0;
                    alarmCalendar.set(Calendar.HOUR, Hrs);  
                    alarmCalendar.set(Calendar.MINUTE, Mins);
                    alarmCalendar.set(Calendar.SECOND, 0);
                    alarmCalendar.set(Calendar.DATE, date);
                    alarmCalendar.set(Calendar.MONTH, Month);
                    alarmCalendar.set(Calendar.YEAR, year);
                    Long alarmTime = alarmCalendar.getTimeInMillis();
                    calendar.set(year, Month, date);
                    days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

                 }   

此代码仅适用于下个月。并且下个月第二次不起作用。例如,如果我在4月份设置闹钟,它将设置为may但不设置为6月等等。

任何人都可以告诉我这可能是什么解决方案。

请帮忙!谢谢!

3 个答案:

答案 0 :(得分:0)

使用setRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation)方法而不仅仅是AlarmManager.set()。您可以找到有关文档的更多信息。

http://developer.android.com/reference/android/app/AlarmManager.html

编辑:它应该是这样的

public void onClick(View arg0) {
Intent serviceIntent = new Intent(AndroidAlarmService.this, this);
pendingIntent = PendingIntent.getService(AndroidAlarmService.this, 0, serviceIntent, 0);

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
long now = calendar.getTimeInMillis();
calendar.add(Calendar.DATE,calendar.getActualMaximum(Calendar.MONTH));
long repeat = calendar.getTimeInMillis();
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, now , repeat , pendingIntent);
}

答案 1 :(得分:0)

试试这个..

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
        SystemClock.elapsedRealtime() + AlarmManager.INTERVAL_DAY,
        AlarmManager.INTERVAL_DAY, intent);

答案 2 :(得分:0)

解决方案是明确强制文字为long类型,这是一个64位数字:

am.setRepeating(AlarmManager.RTC_WAKEUP,alarmTimefor30,30L * 1440L * 60000L,pi);

来源:

Setting alarm on monthly basis android