在我的应用程序中,我使用AlarmManager
类来设置闹钟。要在重新启动移动设备后触发警报,我使用了BroadcastReceiver
。一切正常,我的警报会定期触发。现在问题出现在这种情况下:
假设我当前时间下午2:30 ,我在下午2:35 设置闹钟。之后我关掉手机。一小时后,当我打开手机时,没有警报弹出警报设置的时间。这是因为当前时间超过了我设置闹钟的时间。要解决这个问题,我该怎么办。我已在AlarmManager
课程中发布了用于设置闹钟的代码。请帮我解决这个问题
public class AlarmReceiver extends BroadcastReceiver {
@SuppressWarnings("static-access")
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
Intent myIntent = new Intent(context, MyAlarmService.class);
PendingIntent pendingIntent = PendingIntent.getService(context, i, myIntent, i);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.MILLISECOND, (int) Utilities.diff(NoteManager.getSingletonObject().getAlarmTime(i)));
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
}
}
}
public static long diff(Date date) {
long difference = 0;
try {
// set current time
Calendar c = Calendar.getInstance();
difference = date.getTime() - c.getTimeInMillis();
if (difference < 0) {
// if difference is -1 - means alarm time is of previous time then current
// then firstly change it to +positive and subtract form 86400000 to get exact new time to play alarm
// 86400000-Total no of milliseconds of 24hr Day
difference = difference * -1;
difference = 86400000 - difference;
}
}
catch (Exception e) {
e.printStackTrace();
}
return difference;
}
在清单文件中
<receiver android:name=".AlarmReciever">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
答案 0 :(得分:1)
更好的方法是将警报详细信息存储在数据库中,并通过广播接收器在启动时检索它,就像您说的实现了一样。一旦通知,从数据库中删除详细信息。这样你就可以跟踪所有的警报。即使您可以在启动时启动服务并执行此操作
答案 1 :(得分:1)
Android中的闹钟应用程序也是如此,如果您的手机已关闭并且闹铃响起,它将使您的手机开启,响铃并再次进入睡眠状态。
以下是警报应用Git_Alarm app来源的链接,您可以下载它,看看它是如何做到的。
如果您正在警报接收器中执行其他操作,请启动警报。您基本上可以在手机中再次设置闹钟启动器,这是一个可以帮助您的答案Alarm problem if phone is switched off
编辑: - 一个链接被破坏,替换它