2015-03-09 2 views
2

Итак, я хочу создать список со всеми доступными типами датчиков на устройстве 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, я не получаю никаких результатов.

Как вы можете проверить, имеет ли устройство тип датчика, когда этот тип хранится в переменной? Я уверен, что ответ действительно прост, но я просто не могу это решить. Мне нужно будущее подтверждение этого кода, поэтому я не могу использовать переключатель для его работы.

+1

Связанный: http://stackoverflow.com/a/7936422/883012 – kR105

ответ

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(); 
    } 
} 
+0

Вы вызываете свой метод 'getAllSensors()', но не возвращаете список датчиков? Вместо этого вы добавляете их к некоторой переменной-члену, которую вы даже не инициализируете? Это просто плохой дизайн ... –

+0

Я просто хочу показать пример. – jakeoung

+0

Ну его плохой. Кто-то, кто только изучает программирование, придет, увидит это и реализует его 1: 1, потому что он просто ничего не знает. Вы действительно хотите, чтобы это произошло? Просто подумайте обо всех вопросах «NullPointerException», которые могут возникнуть просто потому, что вы не инициализировали «Список». Что не так с прямым возвратом 'List', который вы получаете из' SensorManager'? –

0

Вы можете использовать что-то вроде этого (замените 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

Смежные вопросы