Загрузка Android завершена, уведомление не получено после перезагрузки - PullRequest
0 голосов
/ 19 декабря 2018

У меня зарегистрирован приемник вещания в манифесте приложения для получения уведомления BOOT_COMPLETED.После перезагрузки мобильного устройства я не получаю уведомления.Тем не менее, я получаю уведомление при открытии приложения.Пожалуйста, помогите.

Получите разрешение на загрузку из моего манифеста:

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

Получатель из моего манифеста:

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

Класс BootCompletedReceiver:

public class BootCompletedReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "Boot Completed Received", Toast.LENGTH_LONG).show();
    }

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

В Интернете есть несколько предложений, что кроме действия BOOT_COMPLETED вам также понадобится QUICKBOOT_POWERON, поддерживаемый некоторыми устройствами.Вы можете проверить это Q / A для деталей.

Чтобы реализовать это, мне также пришлось добавить android:enabled="false", а затем по требованию, когда пользователь выбирает его, я программно изменил это на android:enabled="true" но это немного сложнее, чтобы попробовать.

Вы можете начать с изменения кода с этим, чтобы увидеть, работает ли он.

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

В случае, если вы хотите попробовать логику отключенияи затем включите это программно, чтобы сделать это, используя этот код:

private static void changeBootStateReceiver(Context context, boolean enable) {
    ComponentName receiver = new ComponentName(context, BootCompletedReceiver.class);
    PackageManager pm = context.getPackageManager();

    pm.setComponentEnabledSetting(receiver,
            enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
                    : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
}

Я также хотел бы отключить функцию, когда она мне больше не нужна.

Особые случаи:

В зависимости от производителя устройства при загрузке есть несколько отчетов о различных трансляциях:

  • Xiaomi MIUI использование: android.intent.action.REBOOT
  • HTC использование: com.htc.action.QUICKBOOT_POWERON
0 голосов
/ 19 декабря 2018

Проверьте на своем устройстве, что приложение может запускаться в фоновом режиме (извините, я пока не могу комментировать).

Возможно, вы также захотите попробовать LOCKED_BOOT_COMPLETED на Нуге и выше,Смотрите документы здесь.Позволяет прослушивать действия до того, как пользователь разблокирует экран.

...