我有一个与闹钟管理器配合使用的闹钟服务。当您为以后设置闹钟时,它可以正常工作。但是当你把它设置为过去时(你想明天提醒你)它会变得疯狂并且多次警告而不是一次,最后不会明天工作。 有人帮我解决这个问题。
我喜欢这样:我有一个警报课。当我创建它时,它会产生一个与警报管理器一起运行服务的待定意图。该服务将打开我的活动。
这是错误的方式吗?
这是我的警报类:
public class MyAlarm {
private Context myContext;
private NotificationManager mNM;
private int NOTIFICATION = 10002; //Any unique number for this notification
MyAlarm(Context myAct){
myContext = myAct;
showNotification();
}
// this constractor is for cancelling alarm
MyAlarm(Context myAct, String str) {
myContext = myAct;
cancelPendigIntent();
}
private void cancelPendigIntent() {
//Intent myIntent = new Intent(myContext, MyAlarmService.class);
//G.pendingIntent = PendingIntent.getService(myContext, 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);
//G.pendingIntent.cancel();
//G.alarmManager.cancel(G.pendingIntent);
}
private void showNotification() {
Intent myIntent = new Intent(myContext, MyAlarmService.class);
G.pendingIntent = PendingIntent.getService(myContext, 0, myIntent, PendingIntent.FLAG_CANCEL_CURRENT);
G.alarmManager = (AlarmManager)myContext.getSystemService(Context.ALARM_SERVICE);
G.calendar = Calendar.getInstance();
int to_day= G.calendar.get(Calendar.DATE);
int to_mounth= G.calendar.get(Calendar.MONTH);
int to_year= G.calendar.get(Calendar.YEAR);
G.calendar.set(to_year, to_mounth, to_day, Integer.parseInt(G.myPref.loadString("alert_time_houre")), Integer.parseInt(G.myPref.loadString("alert_time_mins")), 0);
Log.i("LOG", "alert_time_houre="+G.myPref.loadString("alert_time_houre")+" alert_time_mins="+G.myPref.loadString("alert_time_mins"));
G.alarmManager.setRepeating(AlarmManager.RTC, G.calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY, G.pendingIntent);
}
答案 0 :(得分:0)
我终于找到了答案。
我的问题不在于报警管理器。 我将pendig意图设置为打开活动的服务。问题是当服务在后台运行时,它一次又一次地打开我的活动,我的应用程序变得疯狂。也许我应该在完成一次工作后销毁服务。
我将它从服务更改为broadcastreceiver并且它正常工作。
感谢指南:)