Dealing with specific sensor configuration
There might be some scenarios in which certain features of your application might depend on a specific sensor, and that sensor is not present on the device. In such cases, a good option would be to either turn off that dependent feature or not allow the user to install the application. Let's explore each option in detail.
Checking the availability of the sensor at runtime
If you have a weather utility app, and it uses the pressure sensor on the phone to check the atmospheric pressure, then it's not a good idea to directly use the sensor. There are many Android phones that don't have a pressure sensor on them. If such cases are not handled properly, your application might even crash, which will be a bad user experience.
It's always recommended to check the availability of a sensor before using it in the application. The following code snippet shows how to check the availability of the sensor:
private SensorManager mSensorManager; ... mSensorManager= (SensorManager)getSystemService(Context.SENSOR_SERVICE); if(mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)!=null){ // Success! There's a pressure sensor. }else{ // Failure! No pressure sensor. }
Declaring the sensor as mandatory feature
If measuring atmospheric pressure using the phone pressure sensor is the main feature of your application, then you may not want to support those devices that don't have a pressure sensor in them. The Android platform supports this functionality by declaring uses-feature
filters in the AndroidManifest.xml
file:
<uses-feature android:name="android.hardware.sensor.barometer" android:required="true" />
This code snippet informs the Android platform that the pressure sensor is required for this app to function. Google Play uses this uses-feature
to filter out those devices that don't have the pressure sensor in them, and hence your app is only installed on the supported devices. The sensors that are supported by uses-feature
are the accelerometer, gyroscope, light, barometer (pressure), compass (geomagnetic field), and proximity sensors.
If your application uses a sensor for some feature, but can still run without that sensor by turning off that feature, then it's advisable to declare the sensor in uses-feature
but still set the required value to false (android:required="false"
). This informs the operating system that your application uses that sensor, but it can still function without it. It's the developer's responsibility to check the availability of the sensor at runtime.