AlarmManager запускается в эмуляторе, но не на физическом устройстве - PullRequest
2 голосов
/ 27 июня 2010

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

Может кто-нибудь помочь мне понять, почему это происходит?У меня сложилось впечатление, что после того, как будильник был запланирован, он сохранится, если устройство не будет перезагружено.Устройство не активируется в момент срабатывания будильника.

1 Ответ

4 голосов
/ 27 июня 2010

и в Манифесте у меня есть обязательная запись

android:process=":remote" является обязательным. Пожалуйста, удалите это. Быстро.

На реальном устройстве, если я запускаю MyApplication, добавьте сигнал тревоги, а затем убить процесс с помощью убийцы задач

Убийцы задач также удаляют тревоги приложения, хотя эта проблема решена в Android 2.2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...