Dies ist der relevante Code aus der Datei MainActivity.java:
Code: Select all
package org.beeware.android;
import com.chaquo.python.Kwarg;
import com.chaquo.python.PyException;
import com.chaquo.python.PyObject;
import com.chaquo.python.Python;
import com.chaquo.python.android.AndroidPlatform;
public class MainActivity extends AppCompatActivity {
public static MainActivity singletonThis;
protected void onCreate(Bundle savedInstanceState) {
singletonThis = this;
... start Python
}
public void startMyService() {
Intent intent = new Intent(this, MyService.class);
startService(intent);
}
Code: Select all
from chaquopy import Java
class Application(toga.App):
...UI code here
def start_tcp_service(self, widget):
msg = 'START pressed !'
print(msg); self.LogMessage(msg)
self.CallJavaMethod('startMyService')
def CallJavaMethod(self, method_name):
MainActClass = Java.org.beeware.android.MainActivity
MainActivity = MainActClass.singletonThis
method = getattr(MainActivity, method_name)
method()
E/AndroidRuntime: java.lang.RuntimeException: Aktivität kann nicht gestartet werden
ComponentInfo{com.example.myapp/org.beeware.android.MainActivity}:com.chaquo.python.PyException: ModuleNotFoundError: Kein Modul namens
'chaquopy'
Es scheint, dass es kein Modul gibt mit Namen chaquopy. Ich habe versucht, es mit pip zu installieren, aber es wurde nicht gefunden. Aber wie kann ich dann von Python aus auf die MainActivity-Methoden zugreifen? Welches ist das richtige Modul, das eingebunden werden muss?
Ich habe hier eine Dokumentation gefunden, in der es heißt: „Das Java-Modul bietet Funktionen zur Verwendung von Java-Klassen und -Objekten aus Python-Code.“ Ich habe versucht, Java zu importieren, aber das wurde auch nicht gefunden ... Es scheint, dass auf dieser Seite erklärt wird, wie man von Python aus auf Java zugreift, aber ich verstehe nicht alles, was da steht, weil dies meine erste Interaktion ist mit Java und Android...