Ich habe einen ganz bestimmten Anwendungsfall. Ich muss einen Hintergrunddienst starten, der beim Booten in Android 8 einen Webserver ausführt. Kann jemand einen Weg empfehlen, um dies zu erreichen? (In Android O).
Es scheint, dass Sie beim Booten keinen Hintergrundservice mehr starten können. Gibt es eine andere Möglichkeit, dies zu tun? JobService oder stattdessen einen Vordergrunddienst ausführen? Mein Code funktioniert auf Android unter 8, aber es scheint nicht auf O zu funktionieren.
Manifest:
<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));
Ich habe andere ähnliche Fragen angeschaut, aber keine scheint mein spezifisches Problem zu beantworten. Ich schätze alle Hinweise.
Antworten
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(new Intent(context, HTTPServerService.class));
} else {
context.startService(new Intent(context, HTTPServerService.class));
}
Sie müssen JobIntentService anstelle des regulären Dienstes verwenden.
https://developer.Android.com/reference/Android/support/v4/app/JobIntentService.html
JobIntentService arbeitet auch in 6 und ich habe es getestet. Bitte rufen Sie den Service wie unten beschrieben an
Intent intent = new Intent(context, UploadService.class);
intent.putExtra(Constants.JOB_ID, ID);
UploadService.enqueueWork(context, intent);
Und in UploadService verwenden Sie den folgenden Code
public static void enqueueWork(Context context, Intent work) {
enqueueWork(context,UploadService.class,JOB_ID, work);
}
Stellen Sie sicher, dass der Klassenname in der Methode enqueueWork identisch sein muss