Класс вещания не получает намерение вещания для BOOT_COMPLETE

Мне нужно было восстановить тревогу после перезагрузки, для этого я добавил вот этот вещательный приемник:

public class ClsRestartAlarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {

        Logging.logMessage("Broadcast");
        Intent i = new Intent(context, BootService.class);
        context.startService(i);
    }
}
}

и зарегистрирован в манифесте следующим образом:

  <receiver android:name=".classes.ClsRestartAlarm"
        android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

и в результате трансляции я делаю это:

public class BootService extends IntentService {

public BootService() {
    super("boot service");
}

@Override
protected void onHandleIntent(Intent intent) {
    AlarmManagerUtils.setStartAlarm();
    AlarmManagerUtils.setEndAlarm();
}
}

Я предполагаю, что я не получаю широковещательную рассылку BOOT_COMPLETE в классе ClsRestartAlarm, потому что после перезапуска будильник не был установлен, и я не смог получить уведомление (начальный будильник запускает планировщик заданий для отправки уведомления, а завершающий будильник отменяет планировщик заданий) также у меня есть разрешение BOOT_COMPLETE так:

<uses-permission android:name="ANDROID.PERMISSION.RECEIVE_BOOT_COMPLETED"/>

person blackHawk    schedule 21.07.2017    source источник
comment
Вы вручную перезапустили свои устройства?   -  person Vyacheslav    schedule 21.07.2017
comment
Вы пытались использовать простой «тост» внутри вещательного приемника, чтобы проверить, работает ли он?   -  person Vyacheslav    schedule 21.07.2017
comment
да, я перезапустил устройство вручную, также я добавил приемник входа в систему, но он не вошел в систему logcat   -  person blackHawk    schedule 21.07.2017


Ответы (1)


Вместо этого используйте WakefulBroadcastReceiver. Это мое рабочее решение:

    public class BRAutoStart extends WakefulBroadcastReceiver {   
        private final String BOOT_COMPLETED_ACTION = "android.intent.action.BOOT_COMPLETED";
        @Override
        public void onReceive(Context ctx, Intent intent) {
            _A.APPCTX = ctx.getApplicationContext();
            if(intent.getAction().equals(BOOT_COMPLETED_ACTION)){
                //code
            }
        }
    }

    <receiver android:name=".BRAutoStart">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                </intent-filter>
            </receiver>

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
person Vyacheslav    schedule 21.07.2017