You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 20:36:02