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
}
}
}
每次打开我的应用程序时,我都会获取设备的方向值。如果我将设备沿 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
}
}
}