我正在尝试安排我的 AlarmManager 每天以 22:00 - 06:00 之间的不同随机时间醒来。
我已经尝试过这种技术,但它似乎不起作用:
public class AlarmReciver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
try
{
System.out.println(TAG+": Alert recieved");
schedualeNextTimeAlarming(context);
} catch (Exception e)
{
}
private void schedualeNextTimeAlarming(Context context)
{
AlarmManager am = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReciver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am.cancel(pi);
getNextTime(am, pi);
}
private void getNextTime(AlarmManager am, PendingIntent pi)
{
int max = 8;
int min = 1;
final Random myRandom = new Random();
int result = myRandom.nextInt(max - min) + min;
int hourOfDay = 0;
switch (result)
{
case 0:
hourOfDay = 22;
break;
case 1:
hourOfDay = 23;
break;
case 2:
hourOfDay = 24;
break;
default:
hourOfDay = result;
}
hourOfDay = 15; //for testing
System.out.println("next time alert: "+hourOfDay+" seconds");
Calendar cal = Calendar.getInstance();
// cal.add(Calendar.DAY_OF_YEAR, 1); if i disable this line, the Alarm wont work at all.
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 1);
cal.set(Calendar.SECOND, hourOfDay);
am.cancel(pi);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi);
}
我的预期结果是,每 15 秒就会有一次警报。这是输出:
08-02 11:56:48.188: INFO/System.out(9138): InformationReceiver: Alert recieved
08-02 11:56:48.198: INFO/System.out(9138): next time alert: 15 seconds
08-02 11:56:48.218: INFO/System.out(9138): InformationReceiver: Alert recieved
08-02 11:56:48.228: INFO/System.out(9138): next time alert: 15 seconds
08-02 11:56:48.248: INFO/System.out(9138): InformationReceiver: Alert recieved
08-02 11:56:48.248: INFO/System.out(9138): next time alert: 15 seconds
08-02 11:56:48.278: INFO/System.out(9138): InformationReceiver: Alert recieved
08-02 11:56:48.278: INFO/System.out(9138): next time alert: 15 seconds
08-02 11:56:48.308: INFO/System.out(9138): InformationReceiver: Alert recieved
如您所见,它不会每 15 秒报警一次。
我想实现重新安排一个新的闹钟时间的情况,每次它进入这个功能
任何解决方案或其他有效建议都将受到欢迎。
谢谢。