J'ai un cas d'utilisation très spécifique. Je dois démarrer un service d'arrière-plan qui exécute un serveur Web au démarrage d'Android 8. Quelqu'un peut-il recommander un moyen d'y parvenir? (Sous Android O).
Il semble que vous ne puissiez plus démarrer un service d'arrière-plan au démarrage ... Y a-t-il un autre moyen de le faire? JobService ou l'exécution d'un service de premier plan? Mon code fonctionne sur Android en dessous de 8 mais ne semble pas fonctionner sur O.
Manifeste:
<receiver Android:name=".ServiceStarter" Android:enabled="true">
<intent-filter>
<action Android:name="Android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
ServiceStarter (extends BroadcastReceiver
):
@Override
public void onReceive(Context context, Intent intent) {
HTTPServerService.startService(context);
}
HTTPServerService.startService ()
context.startService(new Intent(context, HTTPServerService.class));
J'ai examiné d'autres questions similaires, mais aucune ne semble répondre à mon problème spécifique. J'apprécie tous les indicateurs.
Réponse
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(new Intent(context, HTTPServerService.class));
} else {
context.startService(new Intent(context, HTTPServerService.class));
}
Vous devez utiliser JobIntentService au lieu du service habituel.
https://developer.Android.com/reference/Android/support/v4/app/JobIntentService.html
JobIntentService travaille dans 6 également j'ai testé.S'il vous plaît appelez le service comme ci-dessous
Intent intent = new Intent(context, UploadService.class);
intent.putExtra(Constants.JOB_ID, ID);
UploadService.enqueueWork(context, intent);
Et dans UploadService utilisez le code ci-dessous
public static void enqueueWork(Context context, Intent work) {
enqueueWork(context,UploadService.class,JOB_ID, work);
}
Assurez-vous que le nom de la classe doit être identique dans enqueueWork method