2016-05-10 9 views
0

Ich möchte fragen, ob es möglich ist, nur Jnius aus Kivy zu importieren. Ich benutze Python für Android "Qpython" -Distribution mit Kivy darin kompiliert. Kivy haben auch Pyjnius enthalten. Jetzt versuche ich, Jnius zu verwenden, ohne eine Kivy-App aufzurufen, um Java-Module aufzurufen? Irgendeine Idee, um kivy zu nennen, schloss Module ein, ohne Kivy selbst zu importieren oder um Kivy nur im Terminal ohne Aufruf einer App oder eines Fensters zu verwenden? Oder etwas Hilfe, um Pyjnius für qpython direkt zu kompilieren? DankeImportieren Pyjnius aus Kivy

Antwort

0

Pyjnius ist ein separates Modul, es hängt nicht von Kivy ab. Es macht hängen davon ab, eine JNIEnv* irgendwie zu bekommen, und Pyjnius derzeit hardcodes tun dies über eine SDL-Funktion (obwohl dies auch funktionieren kann, wenn SDL Eventloop nicht tatsächlich ausgeführt wird).

Ich bin nicht sicher, was Sie tatsächlich fragen, wie Ihre App ausgeführt werden würde (wenn es innerhalb von Qpython ist, funktioniert Pyjnius sowieso nicht?), Aber im Allgemeinen ist es einfach zu ändern, um den Zeiger zu erhalten anderer Weg (obwohl Sie C-Code benötigen, um es zu verwalten). Dies ist die Methode, die von verwendet wird, die Pyjnius anweist, eine geeignete API zu verwenden.

+0

Wenn ich einfach versuchen: 'Import jnius' ich: ' Traceback (jüngste Aufforderung zuletzt): File "" Linie 1 in Datei „/ QPython/QPython2-Kern/build/python install/lib/python2.7/site-packages/jnius/__ init__.py ", Zeile 13, in Datei" /QPython/QPython2-core/build/python-install/lib/python2.7/site-packages/ jnius/reflect.py“, Zeile 9, in File "jnius_export_class.pxi", Zeile 44, in jnius.jnius.MetaJavaClass .__ new__ (jnius/jnius.c: 13255) Systemerror: NULL-Ergebnis ohne Fehler in PyObject_Call >>> ' – fteinz

+0

Ich weiß nicht, was genau falsch ist, aber vielleicht liege ich falsch Es funktioniert ohne etwas anderes zu laufen. Es funktioniert zwar ohne Kivy und SDL, aber es gibt keine große Abhängigkeit, selbst wenn qpython ein Problem hat. – inclement

0

Das ist ein Problem von qpython. Sie können nur verwenden pyjnius, wenn Sie dies vor Ihrem Skript hinzufügen:

#qpy:kivy 

Zum Beispiel:

#-*-coding:utf8;-*- 
#qpy:2 
#qpy:kivy 

from kivy.app import App 
from kivy.uix.button import Button 

from jnius import autoclass 
MediaPlayer = autoclass('android.media.MediaPlayer') 
player=MediaPlayer() 
media="/storage/emulated/legacy/YOUR_MEDIA_FILE" 

def reset_player(): 
    if (player.isPlaying()): 
     player.stop() 
    player.reset() 

def restart_player(_): 
    reset_player() 
    try: 
     player.setDataSource(media) 
     player.prepare() 
     player.start() 
    except: 
     player.reset() 

class App(App): 
    def build(self): 
     return Button(text='Hello world!',on_release=restart_player) 

if __name__=="__main__": 
    App().run() 

Hope this helfen Ihnen!