Android 8.0 - Job Intent Service не запускает приложение при загрузке
Изначально у меня был 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 ответ
Я попробовал, и он мог работать нормально. Вы можете проверить три совета ниже.
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.Remove 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()
,