Android 传感器 return 每个应用程序打开的相同值

Android sensors return the same values for every app opening

每次打开我的应用程序时,我都会获取设备的方向值。如果我将设备沿 X 轴向右旋转 90 度,值也会发生变化。但是每次我重新打开我的应用程序时,它都显示 X 值为 348。即使我在打开我的应用程序之前将 phone 旋转了 90 度。为什么传感器 return 一开始的值相同?

为什么我每次进入app,起点都是一样的?

我在打开应用程序之前将设备旋转到 0 度并得到:

我在打开应用程序之前将设备旋转到 90 度并得到:

我正在旋转正确的轴,这不是问题所在

我的代码:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

        sensorManager.registerListener(MainActivity.this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
    }

    @Override
    public void onSensorChanged(SensorEvent event) { // Activated every changes in sensors
        Log.i(TAG, event.values[0] + " | " + event.values[1] + " | " + event.values[2]); // Prit the sensors values
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }

这是否符合您的要求?

我只是在 onStart 中注册监听器并在 onStop 中注销监听器并读取 x 轴的 sensorEvent 值。

class MainActivity : AppCompatActivity() {

    private var sensorManager: SensorManager? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)

        sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager?
    }

    override fun onStart() {
        super.onStart()

        val sensorAccelerometer = sensorManager?.getDefaultSensor(Sensor.TYPE_ORIENTATION)
        if (sensorAccelerometer != null) {
            sensorManager?.registerListener(sensorEventListener, sensorAccelerometer, SensorManager.SENSOR_DELAY_UI)
        } else {
            // No accelerometer available
        }
    }

    override fun onStop() {
        super.onStop()

        sensorManager?.unregisterListener(sensorEventListener)
    }

    private val sensorEventListener: SensorEventListener = object : SensorEventListener {

        override fun onSensorChanged(sensorEvent: SensorEvent?) {
            val rotationX = sensorEvent?.values?.get(0)?.toInt()

            // I am writing the int value to a TextView in the UI
            findViewById<TextView>(R.id.text_view_rotation_x).text = String.format(Locale.ENGLISH, "$rotationX")
        }

        override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
            // Do something
        }
    }
}