从kivy导入pyjnius

时间:2016-05-10 12:43:26

标签: android python-2.7 kivy qpython pyjnius

我想问一下是否可以从Kivy只导入jnius。我使用Python for Android“qpython”发行版,并在其中编译了Kivy。 Kivy还包括pyjnius。 现在我尝试使用jnius而不调用Kivy应用程序来调用Java模块?任何想要调用kivy的想法包括没有导入Kivy本身的模块或只在终端中使用Kivy而不调用App或Window?或者有些帮助直接为qpython编译pyjnius?感谢

2 个答案:

答案 0 :(得分:0)

Pyjnius是一个单独的模块,它不依赖于Kivy。 依赖于以某种方式获取JNIEnv*,并且pyjnius当前通过SDL函数执行硬编码(尽管即使SDL的eventloop实际上没有运行,这也可能有效)。

我不确定你实际上在询问你的应用程序是如何运行的(如果它在qpython中,不管pyjnius不工作吗?),但一般来说很容易修改它以使指针变得不同方式(虽然你需要一些C代码来管理它)。这是python-for-android使用的方法,它修补pyjnius以使用适当的api。

答案 1 :(得分:0)

这是qpython的问题。只有在脚本前添加pyjnius时才能使用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()

希望这对你有帮助!