1

我正在尝试安排我的 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 秒报警一次。

我想实现重新安排一个新的闹钟时间的情况,每次它进入这个功能

任何解决方案或其他有效建议都将受到欢迎。

谢谢。

4

1 回答 1

1

它已经在这里回答了...... 为了首先取消设置此警报,您需要获取原始实例。

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");
    } 
于 2013-08-06T11:59:17.350 回答