pupy/client/android_sources/PythonService.java

126 lines
4.1 KiB
Java

package org.renpy.android;
import android.app.Service;
import android.os.IBinder;
import android.os.Bundle;
import android.content.Intent;
import android.content.Context;
import android.util.Log;
import android.app.Notification;
import android.app.PendingIntent;
import android.os.Process;
public class PythonService extends Service implements Runnable {
// Thread for Python code
private Thread pythonThread = null;
// Python environment variables
private String androidPrivate;
private String androidArgument;
private String pythonHome;
private String pythonPath;
// Argument to pass to Python code,
private String pythonServiceArgument;
public static Service mService = null;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (pythonThread != null) {
Log.v("python service", "service exists, do not start again");
return START_REDELIVER_INTENT;
}
Bundle extras = intent.getExtras();
androidPrivate = extras.getString("androidPrivate");
// service code is located in service subdir
androidArgument = extras.getString("androidArgument") + "/service";
pythonHome = extras.getString("pythonHome");
pythonPath = extras.getString("pythonPath");
pythonServiceArgument = extras.getString("pythonServiceArgument");
String serviceTitle = extras.getString("serviceTitle");
String serviceDescription = extras.getString("serviceDescription");
pythonThread = new Thread(this);
pythonThread.start();
Context context = getApplicationContext();
/*Notification notification = new Notification(context.getApplicationInfo().icon,
serviceTitle,
System.currentTimeMillis());*/
//Intent contextIntent = new Intent(context, PythonActivity.class);
//PendingIntent pIntent = PendingIntent.getActivity(context, 0, contextIntent,
// PendingIntent.FLAG_UPDATE_CURRENT);
//notification.setLatestEventInfo(context, serviceTitle, serviceDescription, pIntent);
//startForeground(1, notification);
return START_REDELIVER_INTENT;
}
@Override
public void onDestroy() {
super.onDestroy();
pythonThread = null;
Process.killProcess(Process.myPid());
}
@Override
public void run(){
// libraries loading, the same way PythonActivity.run() do
System.loadLibrary("sdl");
System.loadLibrary("sdl_image");
System.loadLibrary("sdl_ttf");
System.loadLibrary("sdl_mixer");
System.loadLibrary("python2.7");
System.loadLibrary("application");
System.loadLibrary("sdl_main");
System.load(getFilesDir() + "/lib/python2.7/lib-dynload/_io.so");
System.load(getFilesDir() + "/lib/python2.7/lib-dynload/unicodedata.so");
try {
System.loadLibrary("ctypes");
System.load(getFilesDir() + "/lib/python2.7/lib-dynload/_ctypes.so");
} catch(UnsatisfiedLinkError e) {
}
try {
System.loadLibrary("sqlite3");
System.load(getFilesDir() + "/lib/python2.7/lib-dynload/_sqlite3.so");
} catch(UnsatisfiedLinkError e) {
}
try {
System.load(getFilesDir() + "/lib/python2.7/lib-dynload/_imaging.so");
System.load(getFilesDir() + "/lib/python2.7/lib-dynload/_imagingft.so");
System.load(getFilesDir() + "/lib/python2.7/lib-dynload/_imagingmath.so");
} catch(UnsatisfiedLinkError e) {
}
this.mService = this;
nativeInitJavaEnv();
nativeStart(androidPrivate, androidArgument, pythonHome, pythonPath,
pythonServiceArgument);
}
// Native part
public static native void nativeStart(String androidPrivate, String androidArgument,
String pythonHome, String pythonPath,
String pythonServiceArgument);
public static native void nativeInitJavaEnv();
}