diff --git a/pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/PythonService.java b/pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/PythonService.java index c9693c3eea..a8d3426aa8 100644 --- a/pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/PythonService.java +++ b/pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/PythonService.java @@ -62,10 +62,15 @@ public void onCreate() { public int onStartCommand(Intent intent, int flags, int startId) { if (pythonThread != null) { Log.v("python service", "service exists, do not start again"); - return START_NOT_STICKY; + return startType(); + } + //intent is null if OS restarts a STICKY service + if (intent == null) { + Context context = getApplicationContext(); + intent = getThisDefaultIntent(context, ""); } - startIntent = intent; + startIntent = intent; Bundle extras = intent.getExtras(); androidPrivate = extras.getString("androidPrivate"); androidArgument = extras.getString("androidArgument"); @@ -91,6 +96,10 @@ protected int getServiceId() { return 1; } + protected Intent getThisDefaultIntent(Context ctx, String pythonServiceArgument) { + return null; + } + protected void doStartForeground(Bundle extras) { String serviceTitle = extras.getString("serviceTitle"); String serviceDescription = extras.getString("serviceDescription"); @@ -153,7 +162,10 @@ public void onDestroy() { @Override public void onTaskRemoved(Intent rootIntent) { super.onTaskRemoved(rootIntent); - stopSelf(); + //sticky servcie runtime/restart is managed by the OS. leave it running when app is closed + if (startType() != START_STICKY) { + stopSelf(); + } } @Override diff --git a/pythonforandroid/bootstraps/common/build/templates/Service.tmpl.java b/pythonforandroid/bootstraps/common/build/templates/Service.tmpl.java index e2a7409fe8..de84ac42bf 100644 --- a/pythonforandroid/bootstraps/common/build/templates/Service.tmpl.java +++ b/pythonforandroid/bootstraps/common/build/templates/Service.tmpl.java @@ -19,6 +19,11 @@ protected int getServiceId() { } static public void start(Context ctx, String pythonServiceArgument) { + Intent intent = getDefaultIntent(ctx, pythonServiceArgument); + ctx.startService(intent); + } + + static public Intent getDefaultIntent(Context ctx, String pythonServiceArgument) { Intent intent = new Intent(ctx, Service{{ name|capitalize }}.class); String argument = ctx.getFilesDir().getAbsolutePath() + "/app"; intent.putExtra("androidPrivate", ctx.getFilesDir().getAbsolutePath()); @@ -31,7 +36,12 @@ static public void start(Context ctx, String pythonServiceArgument) { intent.putExtra("pythonHome", argument); intent.putExtra("pythonPath", argument + ":" + argument + "/lib"); intent.putExtra("pythonServiceArgument", pythonServiceArgument); - ctx.startService(intent); + return intent; + } + + @Override + protected Intent getThisDefaultIntent(Context ctx, String pythonServiceArgument) { + return Service{{ name|capitalize }}.getDefaultIntent(ctx, pythonServiceArgument); } static public void stop(Context ctx) {