SensorManager 是 Android 系统中用于管理传感器的一个类。它提供了一组 API,可以用于访问设备上不同的传感器,比如加速度计、陀螺仪、磁力计、光传感器等。通过 SensorManager,应用程序可以注册传感器事件监听器,以便在传感器数据发生变化时接收到通知。
主要功能
-
获取传感器列表:通过
SensorManager可以获取设备上所有可用的传感器列表。SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL); -
注册传感器监听器:可以注册一个
SensorEventListener来监听传感器数据的变化。一般在onResume方法中注册,在onPause中注销,以节省电量。Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(sensorEventListener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL); -
处理传感器数据:当传感器的数据发生变化时,会调用
onSensorChanged方法,可以在这个方法中处理传感器的数据。private SensorEventListener sensorEventListener = new SensorEventListener() { @Override public void onSensorChanged(SensorEvent event) { float x = event.values[0]; float y = event.values[1]; float z = event.values[2]; // 处理传感器数据 } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // 处理传感器精度变化 } }; -
注销传感器监听器:当不再需要传感器时,应注销监听器以节省资源。
sensorManager.unregisterListener(sensorEventListener);
常用传感器类型
- 加速度计 (TYPE_ACCELEROMETER): 用于测量设备在三维空间中的加速度。
- 陀螺仪 (TYPE_GYROSCOPE): 用于测量设备的旋转速率。
- 磁力计 (TYPE_MAGNETIC_FIELD): 用于测量地球磁场强度。
- 光传感器 (TYPE_LIGHT): 用于测量环境光强度。
延迟设置
在注册传感器监听器时,可以指定数据更新的频率,使用以下几个常量:
SENSOR_DELAY_FASTEST: 尽可能快地获取传感器数据。SENSOR_DELAY_GAME: 游戏更新频率,通常为 20ms。SENSOR_DELAY_UI: 用于 UI 更新,通常为 60ms。SENSOR_DELAY_NORMAL: 正常频率,通常为 200ms。
代码示例
以下是一个简单的示例,演示如何使用加速度计来获取设备的三轴加速度数据:
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private SensorManager sensorManager;
private Sensor accelerometer;
private SensorEventListener sensorEventListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
// 处理加速度数据
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// 处理传感器精度变化
}
};
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(sensorEventListener, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
super.onPause();
sensorManager.unregisterListener(sensorEventListener);
}
}
这个示例程序在 onResume 方法中注册了加速度计监听器,在 onPause 中注销监听器,以确保资源的有效使用。