2016-05-10 2 views
0

Kivyからjniusだけをインポートすることができるかどうか質問したいと思います。私はPython for Android "qpython"ディストリビューションをKivyでコンパイルして使用しています。 KivyにはPyjniusも含まれています。 今、Javaモジュールを呼び出すためにKivyアプリケーションを呼び出さずにjniusを使用しようとしていますか? kivyを呼び出すためのアイデアは、Kivy自体をインポートせずにモジュールを含んでいたか、Kivyをターミナル内でのみ使用するか、アプリケーションやウィンドウを呼び出さなくても可能でしたか?またはqpythonのpyjniusを直接コンパイルするための助け?おかげでkivyからpyjniusをインポート

答えて

0

Pyjniusは別のモジュールです、それはKivyに依存しません。 は何とかJNIEnv*を取得することに依存していますが、現在のところ、pyjniusはSDL関数を使用してハードコードを行っています(SDLのイベントループが実際には動作していなくても動作します)。

あなたのアプリがどのように実行されるかについて実際に何を求めているのか分かりません(qpythonの中では、pyjniusは動作しません)が、一般的にポインタを変更するのは簡単です(あなたはそれを管理するためにいくつかのCコードが必要です)。これは、python-for-androidによって使用される方法で、pyjniusに適切なapiを使用するようにパッチを適用します。

+0

私は単純にしようとした場合: 'インポートjnius'私が手: 'トレースバック(最新の呼び出しの最後): ファイル内のファイル ""、1行目、「/ QPython/QPython2コア/構築/ python- install/lib/python2.7/site-packages/jnius/__ init__.py "、13行目、 ファイル" /QPython/QPython2-core/build/python-install/lib/python2.7/site-packages/ jnius/reflection.py "、9行目、 jnius.jnius.MetaJavaClass .__ new__(jnius/jnius.c:13255)のファイル" jnius_export_class.pxi " SystemError:PyObject_CallでエラーのないNULL結果 >>> ' – fteinz

+0

私は何が間違っているのか正確には分かりませんが、多分私は間違っていますそれは他の何かを実行することなく動作します。 KivyとSDLがなければ正常に動作しますが、qpythonに問題があっても大きな依存関係はありません。 – inclement

0

これはqpythonの問題です。あなたは、あなたのスクリプトの前にこれを追加した場合にのみpyjniusを使用することができます。たとえば

#qpy:kivy 

#-*-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() 

・ホープこのヘルプあなた!

関連する問題