代码之家  ›  专栏  ›  技术社区  ›  mobibob

为什么我的android警报管理器会立即启动?

  •  13
  • mobibob  · 技术社区  · 14 年前

    UpdateService 对于一个 AppWidgetProvider . 如果我放一个 Thread.sleep(10*1000); 我可以看到我的服务循环的预期行为。很明显,我有一些根本性的错误,会立即触发。它应该是一个 PendingIntent

    long nextUpdate = 10*1000;
    Log.d(TAG, "Requesting next update in " + nextUpdate + " msec." );
    
    Intent updateIntent = new Intent(ACTION_UPDATE_ALL);
    updateIntent.setClass(this, UpdateService.class);
    
    PendingIntent pendingIntent = PendingIntent.getService(this, 0, updateIntent, 0);
    
    // Schedule alarm, and force the device awake for this update
    AlarmManager alarmManager = (AlarmManager)getBaseContext().getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 
        nextUpdate, pendingIntent);
    
    3 回复  |  直到 9 年前
        1
  •  22
  •   Falmarri    14 年前

    AlarmManager.setRepeating定义为 public void setRepeating (int type, long triggerAtTime, long interval, PendingIntent operation) 第二个参数是第一次调用它的时间。你让它从 SystemClock.elapsedRealtime() ,现在是。

        2
  •  16
  •   CommonsWare    14 年前

    你在说 setRepeating() SystemClock.elapsedRealtime() ). 如果您希望第一个警报在其他时间发出,请添加一个偏移量( SystemClock.elapsedRealtime()+nextUpdate

        3
  •  6
  •   Shripad Bhat    10 年前

    如果您正在为过去的时间创建一个警报的挂起内容,它将立即被触发。示例-将警报安排在今天上午8点,但在上午11点左右执行代码将立即触发。

    cal.add(Calendar.DATE, 1);
    
    long delay = 24 * 60 * 60 * 1000;
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), delay,pendingIntent);` 
    

    这将在第二天的指定时间(即上午8点)触发事件;