ЗАГРУЗИТЕЛЬНЫЙ ПРИЕМНИК, отфильтрованный для упаковки - PullRequest
0 голосов
/ 10 сентября 2018

Я искал ответы на некоторые вопросы, касающиеся загрузочного приемника, но ни один из них не касался моей проблемы. Я добавил все решения в мой код.

Я хочу получить завершенную загрузку на Android OREO, который до сих пор является устройством, которое не работает. Вот полная реализация

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

    //inside application
    <receiver
        android:name="com.anb.lucem.reminder.services.BootReceiver" 
        android:exported="true"
        android:enabled="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

BootReceiver.java

public class BootReceiver extends BroadcastReceiver {

    private String TAG = "com.lucemanb.reminderapp.boot";

    public void onReceive(final Context context, Intent intent) {

        Log.d(TAG, "Boot Completed");
    }
}

Это нормально работает ниже API 26, но Oreo, похоже, использует другой подход

    09-10 16:45:55.792 848-873/? D/AppLockLoader: isAppLocked: packageName=com.anb.lucem.reminder, isLocked=false
09-10 16:45:57.860 657-951/? D/ProcessManager.AS: *** Skip {com.anb.lucem.reminder} to receive broadcast.
09-10 16:45:57.860 657-951/? D/BroadcastQueue: *** Not launch app com.anb.lucem.reminder/10130 for broadcast Intent { act=android.intent.action.BOOT_COMPLETED flg=0x9000010 (has extras) } from null/1000.(AutoStart limited)

Что-то не так делаю?

1 Ответ

0 голосов
/ 10 сентября 2018

Этот код протестирован и работает в Android 8.1 или ниже

манифест:

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

Класс:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

    public class BootReceiver extends BroadcastReceiver {

        private static final String ACTION_QUICK_BOOT = "android.intent.action.QUICKBOOT_POWERON";

        @Override
        public void onReceive(Context context, Intent intent) {
            if(null != intent) {
                final String action = intent.getAction();
                if (Intent.ACTION_BOOT_COMPLETED.equals(action) || ACTION_QUICK_BOOT.equals(action)) {

                    // here do what you want to do on boot
                }
            }
        }
    }
...