BOOT_COMPLETED намерения получены, хотя загрузка не производилась - PullRequest
0 голосов
/ 14 марта 2011

Привет, кто-нибудь еще обнаружил, что иногда намерения BOOT_COMPLETED приходят из ниоткуда?

Я создал OnBootRecoverReceiver, который запускает службу после того, как она получила намерение BOOT_COMPLETED от android - пока работает нормально ... но в некоторых (пока не прослеживаемых) событиях я получаю такое намерение, хотя перезагрузки не было .

Кто-нибудь знает об этом, или у вас была такая же проблема раньше?

Запись манифеста для получателя:

    <receiver android:name=".trigger.OnBootRecoverReceiver">  
        <intent-filter>  
            <action android:name="android.intent.action.BOOT_COMPLETED" />  
            <category android:name="android.intent.category.HOME" />  
        </intent-filter>  
    </receiver>`  

Код получателя:

public class OnBootRecoverReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Intent serviceIntent = new Intent();
    serviceIntent.setAction("de.android.stuff.trigger.OnBootRecoverService");
    context.startService(serviceIntent);
}

}

Если у кого-то есть идея, пожалуйста, не стесняйтесь помочь.

1 Ответ

0 голосов
/ 16 марта 2011

Чтобы прояснить ситуацию: нигде не было создано намерение BOOT_COMPLETED

По какой-то причине Служба (которая запускается Приемником) потерпела крах на определенном устройстве некоторое время назад. Наш хороший друг Android ActivityManager решил реанимировать указанный Сервис:

03-16 12:00:02.239: WARN/ActivityManager(2504): Scheduling restart of crashed service de.ukn.hci.android.diary/.trigger.OnBootRecoverService in 5000ms

Что, конечно, привело меня к мысли, что Recevier был снова уволен, но - как оказалось, снова была только Служба. Без каких-либо намерений перезагрузить.

Решение чтобы остановить это: Добавьте логическое значение Extra к намерению, созданному Получателем

serviceIntent.putExtra("isFromReceiver", true);
context.startService(serviceIntent);

Затем проверьте это логическое значение Extra, находясь в onStart (намерении) службы

    boolean isFromReceiver = intent.getBooleanExtra("isFromReceiver", false);
    if( !isFromReceiver ) {
        return; //just stop starting the service
    }
...