如何用Python结合Kivy获取安卓手机accelerometer与gyroscope数据
Kivy安卓端加速度计/陀螺仪数据获取方案
首选方案:使用Plyer库
Plyer是Kivy生态官方提供的跨平台硬件访问封装库,原生支持安卓平台的加速度计、陀螺仪读取,不需要自己写原生适配逻辑。
步骤1:安装依赖
开发环境直接执行pip install plyer即可。
如果用Buildozer打包APK,需要在buildozer.spec中做如下配置:
- 在
requirements项添加plyer - 在
android.permissions项添加BODY_SENSORS,安卓12及以上系统还需要额外添加ACTIVITY_RECOGNITION权限
步骤2:代码调用示例
from kivy.app import App from kivy.clock import Clock from kivy.uix.label import Label from plyer import accelerometer, gyroscope class SensorTransferApp(App): def build(self): # 启用传感器 accelerometer.enable() gyroscope.enable() # 每100ms读取一次传感器数据,可根据传输需求调整采样频率 Clock.schedule_interval(self.fetch_and_send_data, 0.1) return Label(text="传感器数据采集中...") def fetch_and_send_data(self, dt): acc_val = accelerometer.acceleration gyro_val = gyroscope.orientation # 确认数据有效后调用你已实现的socket逻辑发送 if acc_val and gyro_val: acc_x, acc_y, acc_z = acc_val gyro_x, gyro_y, gyro_z = gyro_val # 此处替换为你的socket发送逻辑即可 print(f"加速度计:x={acc_x:.2f}, y={acc_y:.2f}, z={acc_z:.2f} m/s²") print(f"陀螺仪:x={gyro_x:.2f}, y={gyro_y:.2f}, z={gyro_z:.2f} rad/s") def on_stop(self): # 应用退出时关闭传感器,减少电量消耗 accelerometer.disable() gyroscope.disable() if __name__ == "__main__": SensorTransferApp().run()
备选方案:Pyjnius调用安卓原生接口
如果Plyer的封装不能满足自定义需求(比如需要调整采样精度、设置传感器优先级),可以直接用Pyjnius调用安卓原生的SensorManager接口,核心调用逻辑如下:
from jnius import autoclass from android.runnable import run_on_ui_thread # 加载安卓原生类 Context = autoclass('android.content.Context') Sensor = autoclass('android.hardware.Sensor') SensorManager = autoclass('android.hardware.SensorManager') PythonActivity = autoclass('org.kivy.android.PythonActivity') # 获取传感器服务实例 activity = PythonActivity.mActivity sensor_manager = activity.getSystemService(Context.SENSOR_SERVICE) # 获取对应传感器 acc_sensor = sensor_manager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER) gyro_sensor = sensor_manager.getDefaultSensor(Sensor.TYPE_GYROSCOPE) # 自定义传感器事件监听器,实现数据回调逻辑即可
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

