AlarmManager запускается в эмуляторе, но не на физическом устройстве
У меня есть приложение, которое вызывает 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 вместо устройства-убийцы на устройстве, то сигнал тревоги сработает и будет работать как положено.
Может кто-нибудь помочь мне понять, почему это происходит? У меня сложилось впечатление, что после того, как будильник был запланирован, он сохранится, если устройство не будет перезагружено. Устройство бодрствует в момент срабатывания будильника.