0

我在清单中声明了一个应用程序对象,并且此代码在应用程序运行时运行。我想要完成的是设置警报:

@Override
public void onCreate() {

    super.onCreate();
    singleton = this;
    persister = new Persister();
    am = (AlarmManager) getSystemService(ALARM_SERVICE);
    sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
    sharedPref.registerOnSharedPreferenceChangeListener(this);
    registerAlarms();
}

public void registerAlarms() {

    String sleepString = sharedPref.getString("time_sleepLog", "08:00");
    String[] pieces = sleepString.split(":");
    int sleepHour = Integer.parseInt(pieces[0]);
    int sleepMinute = Integer.parseInt(pieces[1]);

    String eveningString = sharedPref.getString("time_eveningLog", "20:00");
    pieces = null;
    pieces = eveningString.split(":");
    int eveningHour = Integer.parseInt(pieces[0]);
    Log.v(TAG, "eveningHour in registerAlarms: " + eveningHour);
    int eveningMinute = Integer.parseInt(pieces[1]);
    // create calendar objects pointing to the next time this clock will
    // occur
    Calendar sleepCal = Calendar.getInstance();
    sleepCal.set(Calendar.HOUR_OF_DAY, sleepHour);
    sleepCal.set(Calendar.MINUTE, sleepMinute);
    sleepCal.set(Calendar.SECOND, 0);

    Calendar eveningCal = Calendar.getInstance();
    eveningCal.set(Calendar.HOUR_OF_DAY, eveningHour);
    eveningCal.set(Calendar.MINUTE, eveningMinute);
    sleepCal.set(Calendar.SECOND, 0);
    Intent syncIntent = new Intent(this, SleepNotificationReceiver.class);
    syncIntent.putExtra("MoodSleepLogAlarm", 0);
    PendingIntent sleepPending = PendingIntent.getBroadcast(this, 0,
            syncIntent, 0);
    // then set the alarms
    am.setRepeating(AlarmManager.RTC_WAKEUP, sleepCal.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, sleepPending);
    Log.v(TAG, "Alarm for sleep registered at " + sleepCal.getTime());
    }

我登录广播接收器以检查它是否运行:

Log.v(TAG, "Context: " + context.getClass().getName())

在我的应用程序启动为 0 后 4 秒,我可以在 logcat 中看到这一点

6-27 17:59:29.492: V/SleepNotificationReceiver(2609): Context: android.app.ReceiverRestrictedContext

当我registerAlarms()通过按钮调用它时,它没有发生。所以它只在调用 onCreate 时。

为什么它会在 4 秒后运行广播接收器?(它也会在我的设置屏幕中以给定时间给定的相同上下文运行广播接收器 - 但我需要它在设置时不运行。)

4

1 回答 1

3

当您设置闹钟重复时,第二个参数表示第一次闹钟必须在何时响起,所以我认为如果您键入sleepCal.getTimeInMillis()并且与这次相比您处于“未来”,那么闹钟会立即响起。

如果它在将来,请检查第二个参数,因为我认为您没有在日历中设置日期或月份。

于 2013-06-27T16:17:27.693 回答