从 kivy 导入 pyjnius

Posted

技术标签:

【中文标题】从 kivy 导入 pyjnius【英文标题】:Import pyjnius from kivy 【发布时间】:2016-09-05 10:55:56 【问题描述】:

我想问一下是否可以只从 Kivy 导入 jnius。我将 Python 用于 android “qpython” 发行版,其中编译了 Kivy。 Kivy 也包含 pyjnius。 现在我尝试使用 jnius 而不调用 Kivy 应用程序来调用 Java 模块?任何想法调用 kivy 包含模块而不导入 Kivy 本身或仅在终端中使用 Kivy 而不调用应用程序或窗口?或者直接为qpython编译pyjnius的一些帮助?谢谢

【问题讨论】:

【参考方案1】:

Pyjnius 是一个独立的模块,它不依赖于 Kivy。它确实依赖于以某种方式获取JNIEnv*,而 pyjnius 目前通过 SDL 函数进行硬编码(尽管即使 SDL 的事件循环实际上没有运行,这也可能有效)。

我不确定您实际上在询问您的应用程序将如何运行(如果它在 qpython 中,pyjnius 无论如何都不能工作吗?),但通常很容易修改它以获取不同的指针方式(尽管您需要一些 C 代码来管理它)。这是python-for-android使用的方法,它修补了pyjnius以使用适当的api。

【讨论】:

如果我只是尝试:import jnius 我得到:Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/QPython/QPython2-core/build/python-install/lib/python2.7/site-packages/jnius/__init__.py", line 13, in <module> File "/QPython/QPython2-core/build/python-install/lib/python2.7/site-packages/jnius/reflect.py", line 9, in <module> File "jnius_export_class.pxi", line 44, in jnius.jnius.MetaJavaClass.__new__ (jnius/jnius.c:13255) SystemError: NULL result without error in PyObject_Call >>> 我不知道到底出了什么问题,但也许我错了它在没有其他东西运行的情况下工作。它在没有 Kivy 和 SDL 的情况下运行良好,即使 qpython 有问题,也没有主要的依赖关系。【参考方案2】:

这是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()

希望对您有所帮助!

【讨论】:

以上是关于从 kivy 导入 pyjnius的主要内容,如果未能解决你的问题,请参考以下文章

导入我自己的 java 文件时找不到 Pyjnius 类

Kivy + PyJnius 检查安卓版本

为啥除了 jnius 我不能导入任何 pyjnius 的东西?

如何使用 kivy、pyjnius 为 android 制作 GPS 应用程序?

Pyjnius,用于使用 Kivy 登录按钮的 Facebook/Google SDK

通过 pyjnius 在 kivy 中使用 MediaStore