Как узнать, есть ли датчик на моем Android-устройстве?

я хотел бы знать, присутствует ли датчик (например, акселерометр) на моем устройстве Android.

Я имею дело с классом SensorManager. Вот код, который я использую:

sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorMgr.registerListener(this,sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),1);

Спасибо.


person Milos Cuculovic    schedule 26.01.2012    source источник


Ответы (5)


Для этого можно использовать вторую строку:

boolean accelerometer;

accelerometer = sensorMgr.registerListener(this,sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

if(accelerometer) 
{
.
.
}
person Milos Cuculovic    schedule 26.01.2012
comment
Зачем вам регистрировать слушателя? - person Jimmy Kane; 18.04.2016

загляните сюда:

http://developer.android.com/reference/android/content/pm/PackageManager.html

если вы думаете, что вам нужно сделать это:

PackageManager manager = getPackageManager();
boolean hasAccelerometer = manager.hasSystemFeature(PackageManager.FEATURE_SENSOR_ACCELEROMETER);
person Sam Felix    schedule 26.01.2012
comment
Это намного лучше, потому что вы не зависите от диспетчера сенсоров. - person Jimmy Kane; 17.04.2016

Вот рекомендация от developer.android.com: http://developer.android.com/guide/topics/sensors/sensors_overview.html#sensors-identify

Вы можете определить, существует ли на устройстве датчик определенного типа, используя метод getDefaultSensor() и передав константу типа для определенного датчика. Если устройство имеет более одного датчика данного типа, один из датчиков должен быть назначен датчиком по умолчанию. Если для данного типа датчика не существует датчика по умолчанию, вызов метода возвращает null, что означает, что на устройстве нет датчика этого типа.

private SensorManager mSensorManager;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
if (mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) != null){
  // Success! There's a magnetometer.
}
else {
  // Failure! No magnetometer.
}
person DmitryDzz    schedule 26.09.2014

Поскольку я получаю требуемую ошибку API9, я использую вместо этого:

    SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    List<Sensor> deviceSensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
    for (int i = 0; i< deviceSensors.size(); i++) {
        if (deviceSensors.get(i).getType() == Sensor.TYPE_PRESSURE) {
            mHasBarometer = true;
            break;
        }
    }
person Gunnar Bernstein    schedule 22.10.2013

Я использую следующий код:

        SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
       if( sensorManager.getSensorList(Sensor.TYPE_MAGNETIC_FIELD).size() > 0)
       {
           //sensor exist
       }
       else
       {
           //disable feature
       }
person farhad.kargaran    schedule 30.11.2017