私には非常に具体的なユースケースがあります。起動時にWebサーバーを実行するバックグラウンドサービスを開始する必要がありますAndroid 8.誰かがこれを達成する方法を推奨できますか?(In Android O) 。
起動時にバックグラウンドサービスを開始できないようです...別の方法はありますか? JobServiceまたは代わりにフォアグラウンドサービスを実行していますか?私のコードはAndroid 8未満で動作しますが、Oでは動作しないようです。
マニフェスト:
<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));
私は他の同様の質問を調べましたが、私の特定の問題に答えるものはないようです。ポインタをいただければ幸いです。
回答
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
context.startForegroundService(new Intent(context, HTTPServerService.class));
} else {
context.startService(new Intent(context, HTTPServerService.class));
}
+許可AndroidManifest.xml
:
<manifest ...>
...
<uses-permission Android:name="Android.permission.FOREGROUND_SERVICE" />
...
<application ...>
...
</manifest>
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
Intent myIntent = new Intent(context, intentservice.class);
context.startForegroundService(myIntent);
}
}
通常のサービスの代わりにJobIntentServiceを使用する必要があります。
https://developer.Android.com/reference/Android/support/v4/app/JobIntentService.html
JobIntentServiceは6で動作しています。私もテストしました。以下のようなサービスに電話してください。
Intent intent = new Intent(context, UploadService.class);
intent.putExtra(Constants.JOB_ID, ID);
UploadService.enqueueWork(context, intent);
そしてploadService以下のコードを使用します
public static void enqueueWork(Context context, Intent work) {
enqueueWork(context,UploadService.class,JOB_ID, work);
}
クラス名がenqueueWorkメソッドで同じでなければならないことを確認してください