У меня есть приложение, которое вызывает AlarmManager
Intent intent;
intent = new Intent(context, MyEventReceiver.class);
PendingIntent appIntent = PendingIntent.getBroadcast(context, 0,
intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
appIntent);
и в манифесте у меня есть обязательная запись
<receiver android:name=".MyEventReceiver"
android:process=":remote" />
MyEventReceiver выглядит так
public class MyEventReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
try
{
// DO SOME WORK
}
catch (Exception e)
{
Log.e("MyEventReceiver", e.getMessage().toString());
}
}
}
Когда будильник активирован, MyEventReceiver должен быть запущен и что-то делать, даже если мое приложение не запущено.В эмуляторе это имеет место, однако на реальном устройстве это не так.
В качестве примера я запустите MyApplication на эмуляторе, а в DDMS я вижу процесс запуска MyApplication.Из MyApplication я добавляю сигнал тревоги, а затем в DDMS убиваю процесс для MyApplication.Когда срабатывает сигнализация, MyEventReceiver выполняет свою работу, и в DDMS я вижу два процесса: MyApplication и MyApplication: удаленный.
На реальном устройстве, если я запускаю MyApplication, добавьте аварийный сигнал и затем завершите процесс с помощью средства убийцы задач.когда приходит время для срабатывания будильника, ничего не происходит.Если я подключу свое устройство к отладчику и остановлю процесс с помощью DDMS вместо устройства-убийцы на устройстве, то сигнал тревоги будет срабатывать и работать, как и ожидалось.
Может кто-нибудь помочь мне понять, почему это происходит?У меня сложилось впечатление, что после того, как будильник был запланирован, он сохранится, если устройство не будет перезагружено.Устройство не активируется в момент срабатывания будильника.