Android 8.0 - Job Intent Service не запускает приложение при загрузке - PullRequest
0 голосов
/ 02 января 2019

Изначально у меня был Android 7.0, и у меня не было проблем с использованием BroadcastReceiver и сервиса. Однако с изменениями в Android 8.0. Мне нужно было переключиться на JobIntentService, чтобы мое приложение могло запускаться при загрузке.

Я попытался перенести мой код в соответствие с JobIntentService, но при загрузке ничего не происходит. Я не уверен, причина ли это в моем классе обслуживания или в моем классе BroadcastReceiver.

AndroidManifest.xml

    <service android:name=".backgroundService"
                android:permission="android.permission.BIND_JOB_SERVICE"/>

backgroundService.java

    public class backgroundService extends JobIntentService {

        public static final int JOB_ID = 0x01;

        public static void enqueueWork(Context context, Intent work) {
            enqueueWork(context, backgroundService.class, JOB_ID, work);
        }


        @Override
        protected void onHandleWork(@NonNull Intent intent) {

            Toast.makeText(this, "Application and Service Started", Toast.LENGTH_LONG).show();
            Intent dialogIntent = new Intent(this, Home.class);
            dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(dialogIntent);
        }
    }

startOnBoot.java

    public class startOnBoot extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction() != null && intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
                Log.i("In" , "getAction() - Boot");
                backgroundService.enqueueWork(context, intent);
            }
            else
                Log.i("No" , "Boot");
        }
    }

Итак, я пытаюсь запустить Home.class при загрузке.

1 Ответ

0 голосов
/ 02 января 2019

Я попробовал, и он мог нормально работать.Вы можете проверить три подсказки ниже.

1. Проверьте, объявили ли вы разрешение RECEIVE_BOOT_COMPLETED или нет.

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

2. Проверьте, объявили ли вы получателя с действием BOOT_COMPLETED.

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

3.Удалите Toast.makeText(this, "Application and Service Started", Toast.LENGTH_LONG).show(); в вашем сервисе или добавьте его в основной поток.В противном случае выдает ошибку java.lang.RuntimeException: Can't toast on a thread that has not called Looper.prepare().

...