Я пытаюсь реализовать будильник, поэтому мое приложение имеет 2 действия: основной (где пользователь устанавливает будильник) и «звонок», который отображается, когда тревога фактически срабатывает. Вот как я посылаю намерение для AlarmManager назвать «звон» окна:AlarmManager выполняет мой PendingIntent немедленно, а не ждет некоторое время
public void scheduleAlarm(View view) {
Intent intent = new Intent(this, WakeUp.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
PendingIntent wakeUp = PendingIntent.getActivity(this, 123, intent, 0);
AlarmManager alarmManager = (AlarmManager) this.getSystemService(this.ALARM_SERVICE);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calculateMillis(), wakeUp); // setExact is pretty much made for setting alarms anyway
}
private long calculateMillis() {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR, hour);
cal.set(Calendar.MINUTE, minute);
cal.set(Calendar.SECOND, 0);
return cal.getTimeInMillis() - Calendar.getInstance().getTimeInMillis();
}
В моем манифесте я следующее:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".WakeUpWithMath"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".WakeUp"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_wake_up"
android:theme="@style/FullscreenTheme" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
</application>
Я проверил это несколько раз и с разными значениями calculateMillis (даже высмеивается, чтобы возвратить 30000), но результат всегда один и тот же: сразу после вызова alarmManager.setExact
он отображает активность «звонка» и не дожидается времени, чтобы пройти сначала.
Что я пропустил? Является ли манифест неправильным? мне нужно использовать тег <receiver>
? если да, то как его настроить?
, к сожалению, он теперь вообще не запускается, любая идея, что еще может быть неправильным? – niralittle
@niralittle. Вероятно, вы слишком долго вложили время в будущее. «Календарь» использует локальное время, если не задан другой часовой пояс. – StenSoft
в принципе, если я правильно понял, он запускал его сразу, потому что время было меньше, чем сейчас, и такое поведение ожидается, но теперь .. может быть, локаль или ... что-то конкретное, на что я должен смотреть? – niralittle