我的目标是使用 python 模块Plyer(版本 1.2.4 )了解我的 Nexus 5(Andrid 5.1.1 )的地理坐标。
所以我在我的智能手机上安装了解释器QPython2.7(版本 1.0.6 ),并受 Plyer 文档https://plyer.readthedocs.org/en/latest/#plyer.facades.GPS上的示例启发编写了以下代码. Qpyton2.7 安装包括我在代码中使用的Kivy模块(版本 1.8.0 )。
我期望该程序做什么:
当我按下按钮时,程序将启动位置更新,当我再次按下它时,程序将停止更新。当程序更新位置时,它会调用 loc() 方法将按钮文本值更新为当前位置。
该程序的真正作用:
它在 gps.start() 调用时崩溃。
笔记:
该程序不会在 gps.configure() 之前的调用中崩溃。Plyer 模块的方法 vibrator.vibrate() 工作正常!
报错:
...
文件“jnius_export_class.pxi”,第 562 行,在 jnius.jnius.JavaMethod 中。call (jnius/jnius.c:17724) 文件“jnius_export_class.pxi”,第 656 行,在 jnius.jnius.JavaMethod.call_method (jnius/jnius.c:18722) 文件“jnius_utils.pxi”,第 43 行,在 jnius。 jnius.check_exception (jnius/jnius.c:3175) jnius.jnius.JavaException: 发生 JVM 异常
编码:
#qpy:kivy
from plyer import vibrator
from plyer import gps
from kivy.app import App
from kivy.uix.button import Button
class TestApp(App):
def build(self):
self.locbutton = Button(text='START', on_press=self.start_stop)
return self.locbutton
def on_start(self):
gps.configure(on_location=self.loc)
def loc(self, **kwargs):
self.locbutton.text = 'lat:{lat},lon:{lon}'.format(**kwargs)
def start_stop(self, instance):
if self.locbutton.text == 'START':
#self.locbutton.text = 'STOP'
gps.start()
else:
gps.stop()
self.locbutton.text = 'START'
vibrator.vibrate(0.01)
TestApp().run()