Проверете какви сензори има устройство с Android?

Така че искам да създам списък с всички налични типове сензори на устройство с 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, не получавам резултати.

Как се проверява дали дадено устройство има тип сензор, когато този тип се съхранява в променлива? Сигурен съм, че отговорът е много прост, но просто не мога да го разбера. Трябва да проверя този код в бъдеще, така че не мога да използвам превключвател, за да го разработя.


person user3420034    schedule 09.03.2015    source източник
comment
Свързани: stackoverflow.com/a/7936422/883012   -  person kR105    schedule 09.03.2015


Отговори (2)


Например можете да видите списъка с налични сензори по следния начин:

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();
    }
}
person jakeoung    schedule 10.03.2015
comment
Извиквате метода си getAllSensors(), но не връщате списъка със сензори? Вместо това ги добавяте към някаква членска променлива, която дори не инициализирате? Това е наистина лош дизайн... - person Xaver Kapeller; 10.03.2015
comment
Ами лошо е. Някой, който просто учи програмиране, ще дойде да види това и да го внедри 1:1, защото той просто не знае нищо по-добро. Наистина ли искате това да се случи? Просто помислете за всички NullPointerException въпроси, които това може да породи просто защото не сте инициализирали List. Какво не е наред с директното връщане на List, което получавате от SensorManager? - person Xaver Kapeller; 10.03.2015
comment
О, разбрах. Съжалявам за объркването и трябваше да го проверя. - person jakeoung; 11.03.2015
comment
Имам чувството, че някои от тези критики са формулирани по ненужно груб начин. - person Richard; 23.01.2017

Можете да използвате нещо подобно (заменете 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
}

Справка

person juunas    schedule 10.03.2015