web-dev-qa-db-ja.com

Oreoでの起動時にバックグラウンドサービスを開始します

私には非常に具体的なユースケースがあります。起動時に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));

私は他の同様の質問を調べましたが、私の特定の問題に答えるものはないようです。ポインタをいただければ幸いです。

6
lsrom

回答

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>
4
user924
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);        
    }
}
0
shubham

通常のサービスの代わりにJobIntentServiceを使用する必要があります。

https://developer.Android.com/reference/Android/support/v4/app/JobIntentService.html

0
user8884234

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メソッドで同じでなければならないことを確認してください

0
Android dev