我正在尝试安排我的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秒报警一次。
我希望每次进入此功能时都能重新安排新的闹钟时间
非常欢迎任何解决方案或其他有效的建议。
感谢。
答案 0 :(得分:1)
已经回答Here..。要先取消此警报,您需要获取原始实例。
public void unsetAlarm(View v) {
Intent myIntent = new Intent(MainActivity.this,
NotificationService.class);
notifyIntent = PendingIntent.getService(MainActivity.this, 0,
myIntent, 0); // recreate it here before calling cancel
alarmManager.cancel(notifyIntent);
Log.v(TAG, "cancelling notification");
}