【问题标题】:Check what sensors an Android device has?检查 Android 设备有哪些传感器?
【发布时间】:2025-12-30 19:50:16
【问题描述】:

所以我想在 Android 设备上创建一个包含所有可用传感器类型的列表,以便在计时器中获取所有可用传感器的当前值。

我目前有这个:

List<Sensor> availableSensors;

public void getAllSensors() {
    PackageManager manager = getPackageManager();
    SensorManager sensorMngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    List<Sensor> sensors = sensorMngr.getSensorList(Sensor.TYPE_ALL);

    for (Sensor sensor : sensors) {
        if (manager.hasSystemFeature(/*Not sure what to do here*/ sensor)) {
            availableSensors.add(sensor);
        }
    }
}

我对我不确定的部分添加了评论。 hasSystemFeature 似乎在期待一个字符串,但是当我尝试解析它 sensor.getName() 甚至 sensor 时,我没有得到任何结果。

当该类型存储在变量中时,如何检查设备是否具有传感器类型?我敢肯定答案很简单,但我就是想不出来。我需要在未来证明这个代码,所以我不能使用开关来解决它。

【问题讨论】:

标签: java android sensors android-sensors


【解决方案1】:

例如,您可以像这样查看可用传感器的列表:

public void printAllSensors() {
    PackageManager manager = getPackageManager();
    SensorManager sensorMngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    List<Sensor> sensors = sensorMngr.getSensorList(Sensor.TYPE_ALL);

    for (Sensor sensor : sensors) {
        // debug or print the follwoing
        sensor.getName();
    }
}

【讨论】:

  • 您调用您的方法getAllSensors() 但不返回传感器列表?相反,您将它们添加到一些您甚至没有初始化的成员变量中?这真是糟糕的设计......
  • 嗯,它是一个糟糕的。刚刚学习编程的人会看到这一点并 1:1 实施它,因为他只是不知道更好。你真的希望这种情况发生吗?想想所有NullPointerException 的问题,这可能只是因为你没有初始化List。直接返回从SensorManager 得到的List 有什么问题?
  • 哦,我明白了。很抱歉让您感到困惑,我应该检查一下。
  • 我觉得其中一些批评措辞过于严厉。
【解决方案2】:

您可以使用这样的东西(将 TYPE_ACCELEROMETER 替换为您要检查的任何类型):

SensorManager sensorMngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sensor = sensorMngr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (sensor != null) {
  // sensor exists and you have permission to access it
}

Reference

【讨论】: