📜  Android 传感器示例(1)

📅  最后修改于: 2023-12-03 15:13:21.515000             🧑  作者: Mango

Android 传感器示例

Android 提供了多个传感器,例如加速度计、陀螺仪、磁力计等等。这些传感器能够帮助你获取设备的物理动作和环境状态信息。在本文中,我们将会介绍如何使用 Android 系统提供的传感器 API 来读取传感器数据。

获取传感器服务

在使用传感器之前,你需要先获取到系统提供的传感器服务。通过 SensorManager 类获取系统传感器服务的实例:

SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
获取传感器列表

获取传感器列表的方式是调用 SensorManager 实例的 getSensorList() 方法:

List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);

getSensorList() 方法返回一个 Sensor 类型的列表,其中包含已知的所有传感器。该列表包含的传感器类型由参数决定,如上述代码中的 Sensor.TYPE_ALL 表示获取所有传感器。

注册传感器监听器

获取传感器实例后,你需要注册传感器监听器以获取传感器数据。实现传感器监听器需要实现 SensorEventListener 接口,并实现其中的两个方法:

@Override
public void onSensorChanged(SensorEvent event) {
    // 收到传感器数据时的操作
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // 传感器精度发生变化时的操作
}

注册相应的传感器监听器的方法如下:

Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(sensorEventListener, sensor, SensorManager.SENSOR_DELAY_NORMAL);

其中,第一个参数是传感器监听器,第二个参数是需要监听的传感器实例,第三个参数表示传感器数据更新的速率。 SENSOR_DELAY_NORMAL 表示传感器数据更新的速率为正常模式。

示例代码
public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private SensorManager sensorManager;
    private Sensor accelerometerSensor;

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

        // 获取传感器服务
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

        // 获取加速度计传感器
        accelerometerSensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

        // 注册加速度计监听器
        sensorManager.registerListener(this, accelerometerSensor, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // 收到传感器数据时的操作
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            float x = event.values[0];
            float y = event.values[1];
            float z = event.values[2];
            Log.i("MainActivity", "accelerometer x = " + x + ", y = " + y + ", z = " + z);
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // 传感器精度发生变化时的操作
    }

    @Override
    protected void onStop() {
        super.onStop();

        // 取消注册加速度计监听器
        sensorManager.unregisterListener(this);
    }
}

以上示例代码演示了如何获取加速度计传感器,并注册加速度计监听器来获取传感器数据。在 onSensorChanged() 方法中打印了传感器数据的 x、y、z 值。在 onStop() 方法中取消了加速度计监听器的注册。