Я пытаюсь настроить будильник на каждые 5 минут.Плановая аварийная сигнализация никогда не вызывает приемный класс
Это код для установки будильника:
@Override
public void scheduleAlarmManager() {
Timber.i("After SignIn sets AlarmManager");
// broadcast
Intent intent = new Intent(this, PatientAlarmReceiver.class);
intent.setAction(PATIENT_START_ALARM_ACTION);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
this, REQUEST_CODE, intent, 0);
// and set alarmManager
AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Calendar currentCal = Calendar.getInstance();
long currentTIme = currentCal.getTimeInMillis();
// if there's not an Alarm already set then set one
if (!isAlarmSet(this)) {
Timber.i("Alarm not set - so set one");
alarm.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
currentTIme + TWO_MINS_DURATION, TWO_MINS_DURATION, pendingIntent);
}
}
и я могу подтвердить, что я установить сигнализацию правильно, так как я вижу в моем LogCat сообщения я вхожу с Timber
.
Мой ресивер:
public class PatientAlarmReceiver extends BroadcastReceiver {
public static final String TAG = "PATIENT-ALARM-RECEIVER";
public static final String PATIENT_START_ALARM_ACTION = "bp.headsup.receivers.alarm.patient";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Inside OnReceive Patient");
Timber.i("Inside OnReceive Patient");
if (intent == null || intent.getAction() == null) {
return;
}
String action = intent.getAction();
if (PATIENT_START_ALARM_ACTION.equalsIgnoreCase(action)) {
onStartCheckForConnectionRequest(context);
}
}
/**
* If is connected to network starts services
*/
private void onStartCheckForConnectionRequest(Context context) {
NetworkUtils networkUtils = new NetworkUtils(context);
if (networkUtils.isNetworkConnected()) {
Intent checkForConnRequestIntent = new Intent(context, PatientCheckForConnectionRequestService.class);
context.startService(checkForConnRequestIntent);
Timber.i("Starts Service From PatientALARMMANAGER");
}
}
}
И Я в манифесте:
<!-- Receivers -->
<receiver
android:name="bp.headsup.receivers.PatientAlarmReceiver" />
Кроме того, если я бегу: adb shell dumpsys alarm
Я вижу:
ELAPSED_WAKEUP #0: Alarm{42d804e8 type 2 bp.headsup.mock}
operation=PendingIntent{42d0c230: PendingIntentRecord{42d0f000 bp.headsup.mock broadcastIntent}}
Макет в приведенном выше ответе - это источник, который я использую - не знаю, имеет ли это какое-либо отношение к этому, я просто упоминаю об этом.
Проблема в том, что я никогда не читал в logcat сообщения, которые у меня есть в onReceive
, на моем классе приемника, и, очевидно, никаких служб не запускается. Кто-нибудь может помочь с этим? Я использую устройство, которое работает с kitKat 4.4 (api 19), но я тоже пробовал его с эмулятором, и результат был таким же.
Я думаю, что вы не установили действие (BOOT_COMPLETED) получателя в манифесте. –
Вы устанавливаете тревогу прошедшего времени, но вы даете ей время начала «настенных часов». Либо замените будильник на тип «RTC», либо получите время запуска из «SystemClock.elapsedRealtime()». –
@MikeM. Верный! это сработало! благодаря – Mes