Skip to content

Commit fa0573e

Browse files
committed
fix sticky
1 parent aadcfc4 commit fa0573e

File tree

2 files changed

+75
-26
lines changed

2 files changed

+75
-26
lines changed

pythonforandroid/bootstraps/common/build/src/main/java/org/kivy/android/PythonService.java

Lines changed: 35 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ public class PythonService extends Service implements Runnable {
2525
private Thread pythonThread = null;
2626

2727
// Python environment variables
28-
private String androidPrivate;
29-
private String androidArgument;
30-
private String pythonName;
31-
private String pythonHome;
32-
private String pythonPath;
33-
private String serviceEntrypoint;
28+
public String androidPrivate;
29+
public String androidArgument;
30+
public String pythonName;
31+
public String pythonHome;
32+
public String pythonPath;
33+
public String serviceEntrypoint;
3434
// Argument to pass to Python code,
35-
private String pythonServiceArgument;
35+
public String pythonServiceArgument;
3636

3737

3838
public static PythonService mService = null;
@@ -60,28 +60,35 @@ public void onCreate() {
6060

6161
@Override
6262
public int onStartCommand(Intent intent, int flags, int startId) {
63+
startIntent = intent;
6364
if (pythonThread != null) {
6465
Log.v("python service", "service exists, do not start again");
65-
return START_NOT_STICKY;
66+
return startType();
6667
}
68+
if (intent != null) {
69+
70+
Bundle extras = intent.getExtras();
71+
androidPrivate = extras.getString("androidPrivate");
72+
androidArgument = extras.getString("androidArgument");
73+
serviceEntrypoint = extras.getString("serviceEntrypoint");
74+
pythonName = extras.getString("pythonName");
75+
pythonHome = extras.getString("pythonHome");
76+
pythonPath = extras.getString("pythonPath");
77+
boolean serviceStartAsForeground = false;
78+
String foreground = extras.getString("serviceStartAsForeground");
79+
if (foreground != null) {
80+
serviceStartAsForeground = foreground.equals("true");
81+
}
82+
pythonServiceArgument = extras.getString("pythonServiceArgument");
83+
pythonThread = new Thread(this);
84+
pythonThread.start();
6785

68-
startIntent = intent;
69-
Bundle extras = intent.getExtras();
70-
androidPrivate = extras.getString("androidPrivate");
71-
androidArgument = extras.getString("androidArgument");
72-
serviceEntrypoint = extras.getString("serviceEntrypoint");
73-
pythonName = extras.getString("pythonName");
74-
pythonHome = extras.getString("pythonHome");
75-
pythonPath = extras.getString("pythonPath");
76-
boolean serviceStartAsForeground = (
77-
extras.getString("serviceStartAsForeground").equals("true")
78-
);
79-
pythonServiceArgument = extras.getString("pythonServiceArgument");
80-
pythonThread = new Thread(this);
81-
pythonThread.start();
82-
83-
if (serviceStartAsForeground) {
84-
doStartForeground(extras);
86+
if (serviceStartAsForeground) {
87+
doStartForeground(extras);
88+
}
89+
} else {
90+
pythonThread = new Thread(this);
91+
pythonThread.start();
8592
}
8693

8794
return startType();
@@ -153,7 +160,9 @@ public void onDestroy() {
153160
@Override
154161
public void onTaskRemoved(Intent rootIntent) {
155162
super.onTaskRemoved(rootIntent);
156-
stopSelf();
163+
if (startType() == START_NOT_STICKY) {
164+
stopSelf();
165+
}
157166
}
158167

159168
@Override

pythonforandroid/bootstraps/common/build/templates/Service.tmpl.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import android.content.Intent;
44
import android.content.Context;
55
import org.kivy.android.PythonService;
6+
import org.kivy.android.PythonUtil;
7+
import java.io.File;
68

79

810
public class Service{{ name|capitalize }} extends PythonService {
@@ -34,6 +36,44 @@ static public void start(Context ctx, String pythonServiceArgument) {
3436
ctx.startService(intent);
3537
}
3638

39+
@Override
40+
public void run(){
41+
String package_root = getFilesDir().getAbsolutePath();
42+
String app_root = package_root + "/app";
43+
File app_root_file = new File(app_root);
44+
PythonUtil.loadLibraries(app_root_file,
45+
new File(getApplicationInfo().nativeLibraryDir));
46+
this.mService = this;
47+
48+
if (androidPrivate == null) {
49+
androidPrivate = package_root;
50+
}
51+
if (androidArgument == null) {
52+
androidArgument = app_root;
53+
}
54+
if (serviceEntrypoint == null) {
55+
serviceEntrypoint ="{{ entrypoint }}";
56+
}
57+
if (pythonName == null) {
58+
pythonName = "{{ name }}";
59+
}
60+
if (pythonHome == null) {
61+
pythonHome = app_root;
62+
}
63+
if (pythonPath == null) {
64+
pythonPath = package_root;
65+
}
66+
if (pythonServiceArgument == null) {
67+
pythonServiceArgument = app_root+":"+app_root+"/lib";
68+
}
69+
nativeStart(
70+
androidPrivate, androidArgument,
71+
serviceEntrypoint, pythonName,
72+
pythonHome, pythonPath,
73+
pythonServiceArgument);
74+
stopSelf();
75+
}
76+
3777
static public void stop(Context ctx) {
3878
Intent intent = new Intent(ctx, Service{{ name|capitalize }}.class);
3979
ctx.stopService(intent);

0 commit comments

Comments
 (0)