BOOT_COMPLETE Трансляция не принимается иногда - PullRequest
0 голосов
/ 14 февраля 2020

Я просмотрел много вопросов по stackoverflow, и ни один из них не соответствует моему запросу. Моя текущая ситуация такова, что сейчас у меня есть проект, у которого есть получатель:

public class TestAppReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("recieverTest", "receiving intent for test app and about to schedule job");
        ComponentName serviceComponent = new ComponentName(context, TestAppJobService.class);
        Random rand = new Random();
        int randomNum = rand.nextInt(1000);
        JobInfo.Builder builder = new JobInfo.Builder(randomNum, serviceComponent);
        builder.setMinimumLatency(30 * 1000); // Wait at least 30s
        builder.setOverrideDeadline(60 * 1000); // Maximum delay 60s

        JobScheduler jobScheduler = (JobScheduler)context.getSystemService(context.JOB_SCHEDULER_SERVICE);
        jobScheduler.schedule(builder.build());
        Log.v("recieverTest", "scheduled job after receiving intent");
    }
}

, и мой манифест выглядит так:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.test"
    android:versionCode="1"
    android:versionName="1.0">

    <uses-sdk android:targetSdkVersion="21" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <uses-permission android:name="android.permission.RECEIVE_QUICKBOOT_POWERON"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:theme="@style/AppTheme">

        <activity
            android:name=".MainActivity"
            android:process="com.example.test">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service
            android:name="com.example.test.TestAppJobService"
            android:permission="android.permission.BIND_JOB_SERVICE"></service>

        <receiver android:name="com.example.test.TestAppReceiver" android:exported="true" android:enabled="true" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.DEFAULT" />
                <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
            </intent-filter>
        </receiver>

        <service
            android:name=".MainActivity$ForegroundService"
            android:enabled="true" />

    </application>

</manifest>

Так что проблема, иногда, когда я перезагружаю свой устройство, я вижу запуск проекта, потому что он получил широковещательную рассылку boot_complete, и он отлично расписывает работу. Тем не менее, в других случаях, когда я перезагружаюсь, ничего не происходит. Разве он не должен планировать работу каждый раз, когда я перезагружаю свое устройство, так как оно получает трансляцию boot_complete? Кроме того, когда я делаю dumpsys из широковещательной статистики, я вижу, что boot_complete не получен, но "Пропущен". Это почему?

И последнее, я даже вручную запускаю трансляцию, выполняя

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

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

PS это тестируется на пользовательском устройстве, работающем на Android P ie.

...