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

如何在Kotlin开发的Android应用中通过SensorManager获取线性加速度数据

正确实现线性加速度数据展示的调整步骤
  • 第一步:补全传感器监听器的注册与解绑逻辑
    你当前只完成了SensorManager的初始化,没有向系统注册线性加速度传感器的监听,所以onSensorChanged不会收到对应回调。需要在Activity的生命周期方法中新增注册/解绑逻辑:
override fun onResume() {
    super.onResume()
    val linearAccelSensor = sensorManager?.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION)
    // 处理设备不支持线性加速度传感器的场景
    if (linearAccelSensor == null) {
        Toast.makeText(this, "当前设备不支持线性加速度传感器", Toast.LENGTH_SHORT).show()
        return
    }
    // 注册监听器,第三个参数为采样率,可按需选择:
    // SENSOR_DELAY_NORMAL(默认,适合常规UI展示)、SENSOR_DELAY_UI(适合低频率UI更新)、SENSOR_DELAY_GAME(高刷新率,适合游戏场景)
    sensorManager?.registerListener(this, linearAccelSensor, SensorManager.SENSOR_DELAY_NORMAL)
}

override fun onPause() {
    super.onPause()
    // 页面退后台时解绑监听器,避免不必要的耗电和内存泄漏
    sensorManager?.unregisterListener(this)
}
  • 第二步:补全SensorEventListener接口要求的方法,同时优化onSensorChanged的健壮性
    Activity实现SensorEventListener接口必须同时实现onAccuracyChanged方法,否则会出现编译错误;同时可以增加事件空校验、刷新频率控制逻辑,避免UI频繁刷新卡顿:
// 传感器精度变化回调,无需额外处理可直接空实现
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {

}

override fun onSensorChanged(event: SensorEvent?) {
    // 空事件直接过滤
    event ?: return
    if (event.sensor.type != Sensor.TYPE_LINEAR_ACCELERATION) return

    // 控制UI刷新频率为100ms一次,可按需调整
    val currentTime = System.currentTimeMillis()
    lastUpdatedDate?.let { last ->
        if (currentTime - last.time < 100) {
            return
        }
    }
    lastUpdatedDate = Date(currentTime)

    // event.values[0]为X轴加速度、values[1]为Y轴、values[2]为Z轴,单位均为m/s²,已扣除重力加速度影响
    val showContent = "X轴:%.2f m/s²\nY轴:%.2f m/s²\nZ轴:%.2f m/s²".format(
        event.values[0],
        event.values[1],
        event.values[2]
    )
    timer_since_started_detecting.text = showContent
}
  • 第三步:适配高版本系统权限
    如果你的App目标版本是Android 12(API 31)及以上,且需要使用高采样率获取传感器数据,需要在AndroidManifest.xml中添加对应权限声明:
<uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />

仅常规低频率展示数据可不添加该权限。

内容的提问来源于stack exchange,提问作者Enrico Cortinovis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:39:01