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

Android 如何准确获取手机的倾斜角度?

Android 实现平放0°、竖直90°倾斜角度获取方案

完全可以通过手机内置传感器实现该需求,你要的倾斜角度对应Android传感器体系中的俯仰角(pitch),刚好符合你定义的数值规则:屏幕朝上平放时为0°,屏幕朝向用户竖直放置时为90°。

实现步骤

1. 初始化传感器

优先使用旋转矢量传感器,相比单独使用加速度+地磁传感器的组合,数值更稳定,抗干扰能力更强:

// 初始化传感器管理器
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor rotationVectorSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);

传感器属于系统普通权限,不需要动态申请,直接使用即可。

2. 注册传感器回调计算角度

SensorEventListener tiltListener = new SensorEventListener() {
    private final float[] rotationMatrix = new float[9];
    private final float[] orientationValues = new float[3];

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() != Sensor.TYPE_ROTATION_VECTOR) return;
        // 旋转矢量转为旋转矩阵
        SensorManager.getRotationMatrixFromVector(rotationMatrix, event.values);
        // 旋转矩阵转为方位角数组,依次为azimuth、pitch、roll
        SensorManager.getOrientation(rotationMatrix, orientationValues);
        // 弧度转角度,得到俯仰角
        float pitchAngle = (float) Math.toDegrees(orientationValues[1]);
        // 处理负数,保证数值在0~90区间符合需求
        pitchAngle = Math.abs(pitchAngle);
        // 此处直接使用pitchAngle即可,就是你要的倾斜角度
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // 无特殊需求可留空
    }
};

// 注册监听器,使用普通采样率平衡功耗和灵敏度
sensorManager.registerListener(tiltListener, rotationVectorSensor, SensorManager.SENSOR_DELAY_NORMAL);

3. 页面销毁时注销监听器

避免后台持续占用传感器导致耗电:

@Override
protected void onDestroy() {
    super.onDestroy();
    sensorManager.unregisterListener(tiltListener);
}

注意事项

  • 若需要兼容不支持旋转矢量传感器的低端设备,可以替换为TYPE_ACCELEROMETER+TYPE_MAGNETIC_FIELD组合,分别获取两个传感器的数值后调用SensorManager.getRotationMatrix()生成旋转矩阵,后续逻辑和上方一致
  • 如果觉得数值抖动明显,可以对连续返回的pitchAngle做低通滤波处理,平滑数值
  • 不要在onSensorChanged回调中执行耗时操作,传感器回调频率很高,容易造成卡顿

内容的提问来源于stack exchange,提问作者Henry Zhu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:15:04