如何实现年度和月度重复警报?
我想在我的应用程序中设置每月和每年的闹钟。我每周都这样做。 AlarmManager.INTERVAL_DAY帮助了我,但我无法找到好的方法来实施每月和每年重复。如何实现年度和月度重复警报?
搜索迄今:
http://www.satyakomatineni.com/akc/display?url=displaynoteimpurl&ownerUserId=satya&reportId=3503
http://groups.google.com/group/android-developers/browse_thread/thread/9f946e40307073c4?pli=1
可用任何其他方式做到这一点?任何帮助赞赏。
我解决了这个问题。在我的应用程序中,多重警报设置了不同的重复时间间隔。因此,在我的广播接收器中发出警报,我根据预定要重复的时间重新安排警报。我使用日历对象逐个添加月份和年份并重新设置为下一个闹钟。我使用这样的代码(用于安排下个月) -
PendingIntent sender = PendingIntent.getBroadcast(context,Integer.parseInt(Long.toString(id)), intent1, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(calendar.getTimeInMillis());
calendar.add(Calendar.SECOND, 30);
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
calendar.add(Calendar.MONTH, 1);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
我认为,你有这个方法有两个固有的问题:
AlarmManager不会接受长的时间间隔,因为米利斯的数量将溢出的说法
我不认为报警将会在您的手机重新启动后幸免于难,这在很长一段时间内肯定会发生。
我的建议你明天如果没有的话。
public class AlarmService extends Service {
//compat to support older devices
@Override
public void onStart(Intent intent, int startId) {
onStartCommand(intent, 0, startId);
}
@Override
public int onStartCommand (Intent intent, int flags, int startId){
//your method to check if an alarm must be fired today
checkForTodayAlarmsAndBehaveAppropriately();
//reschedule me to check again tomorrow
Intent serviceIntent = new Intent(AlarmService.this,AlarmService.class);
PendingIntent restartServiceIntent = PendingIntent.getService(AlarmService.this, 0, serviceIntent,0);
AlarmManager alarms = (AlarmManager)getSystemService(ALARM_SERVICE);
// cancel previous alarm
alarms.cancel(restartServiceIntent);
// schedule alarm for today + 1 day
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, 1);
// schedule the alarm
alarms.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), restartServiceIntent);
}
}
要在引导时使用启动你的服务这样的:
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class serviceAutoLauncher extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Intent serviceIntent = new Intent(context,AlarmService.class);
context.startService(serviceIntent);
}
}
最后添加到您的清单来安排你的serviceAutoLauncher在每次启动上马:
<receiver android:name="serviceAutoLauncher">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
<category android:name="android.intent.category.HOME"></category>
</intent-filter>
</receiver>
感谢您的快速响应。在我的项目中,我使用广播接收器来捕捉闹钟意图。我不知道我怎么能找出哪个闹钟的意图在接收我的广播receiver.then如何重新安排它?你能提供一些示例代码吗? – Hiral
@Hiral:看我的编辑。 –
该代码似乎没有工作。它一直告诉我添加一个返回语句public int onStartCommand。有任何想法吗? –
我已经低估了这个被接受的答案,因为Laurent的答案其实是正确的答案。 –