如何在Android中获取方向(如北,西)

Cem*_*anc 7 android android-manifest compass-geolocation

我是Android的新手,我想根据我的相机获得方向.如何根据相机获取方向信息?你能给出一个想法吗?

Yve*_* M. 10

不推荐使用TYPE_ORIENTATION

我们不能再使用方向传感器,我们可以串联使用磁场传感器和加速计传感器来获得相同的功能.这是更多的工作,但它允许继续使用回调来处理方向更改.

这是一个罗盘示例:http: //www.codingforandroid.com/2011/01/using-orientation-sensors-simple.html

加速度计和磁场azimut的转换:

float[] mGravity;
float[] mGeomagnetic;

public void onSensorChanged(SensorEvent event) {

    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
        mGravity = event.values;

    if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
        mGeomagnetic = event.values;

    if (mGravity != null && mGeomagnetic != null) {
        float R[] = new float[9];
        float I[] = new float[9];

        if (SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic)) {

            // orientation contains azimut, pitch and roll
            float orientation[] = new float[3];
            SensorManager.getOrientation(R, orientation);

            azimut = orientation[0];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要指向北方,您可以计算以度为单位的旋转:

float rotation = -azimut * 360 / (2 * 3.14159f);
Run Code Online (Sandbox Code Playgroud)


Joe*_*Joe 1

不确定你的相机是什么意思,但你可以根据硬件传感器得到它。请参阅以下链接:

指南针示例

另请查看本页TYPE_ORIENTATION上的传感器。

  • **TYPE_ORIENTATION 已弃用**,请参阅 http://stackoverflow.com/a/23060896/1480391 (2认同)