When in airplane mode, devices can still access some sensors to enable specific functionality, such as screen rotation and taking pictures. Android 10 provides a developer options setting to shut off all sensors in a device. This feature helps developers test their app’s functionality in situations where those sensors become unavailable, and also gives users a way to control the sensors in their device.
When a developer or user enables Sensors off in developer
options (Settings > System >
Developer options > Quick settings developer
tiles), a new tile appears in the quick settings tray. They can use
the tile to prevent apps from accessing the camera, microphone, and all sensors
managed by the
Android 10 includes a reference implementation that
handles the camera, microphone, and
SensorManager sensors. The
system service that manages the Sensors off state and
notifies clients of state changes is located in
The manager that facilitates access to
within an application’s context is located in
If your devices use the default implementation of
AudioPolicyService, then no
additional customization is needed to the reference design. If you have other
sensors, see Customization for more details
about supporting this feature.
When implementing this feature, sometimes camera apps don't respond properly
onError callbacks, both when first attempting to acquire
the camera and when the camera is no longer available. This typically results
in the app crashing when this tile is enabled, but this can be used as a signal
to indicate that the feature is behaving as expected.
This behavior indicates that the app isn't properly handling the
onError callback in
Sensors off is enabled, the
is invoked with
set as the error value. Update any first-party apps to handle the
onError callback with this value by not making any subsequent
CameraDevice until a subsequent
openCamera call is successful.
When Sensors off is enabled, the sensors stop reporting any
data to the system or apps. An app can still request a sensor and register a
listener when Sensors off is enabled, but either silence is
returned for the mic or the
onSensorChanged callback is never
invoked for the sensors. As soon as the tile is disabled, those same listeners
start to receive the actual output from the mic or the expected callbacks to
onSensorChanged without needing to do any additional work. The
default behavior of silenced sensors is as follows.
If an app is using the camera when Sensors off is enabled,
an error is sent to the
onError callback method and
CameraDevice is closed.
If an app attempts to access the camera when Sensors off is
enabled, an error is sent to the
onError callback method.
When Sensors off is enabled, access to the microphone is still possible but only silence is returned. If an app is using the microphone when Sensors off is enabled, no error is generated, but the recording is silenced and just returns an array of zeros. If Sensors off is disabled while the app is still using the microphone, the expected audio data is returned.
If an app attempts to access the microphone when Sensors off is enabled, the microphone returns silence.
When an app tries to access other sensors when Sensors off is enabled, the sensor type influences the default behavior:
- Continuous sensors: Sensors in this reporting mode stop dispatching events. If an app is interacting with a continuous sensor when Sensors off is enabled, the sensor sends no additional data to the app until the feature is disabled.
- Flush events: A sensor flush can be requested when the tile
is enabled and the
onFlushCompletecallback is invoked to indicate that the requested flush completed successfully, but no new events with sensor data are generated and returned to the
- On-change events: When Sensors off is enabled, no new change events are reported.
- Trigger events: When Sensors off is enabled, trigger events stop generating. Any existing events complete.
If your devices use the default implementation of
AudioPolicyService, then no additional customization is
needed to the reference design. However, you can support sensors managed
SensorManager, remove Sensors off
from your devices, or change the System UI for the developer quick settings
tiles or the icon for the Sensors off tile.
Supporting more sensors
If your devices contain sensors managed outside of
you should add support for them using
When the Sensors off tile is toggled,
SensorPrivacyService invokes a one-way callback for all registered
listeners. When this callback is received, the registered listener can take the
necessary steps based on the state of the tile. If it's enabled, all
existing connections can be terminated and return empty data, and a flag set to
prevent new connections. If it's disabled, the flag can be reset to
allow new connections. Using the camera service
as an example, follow these steps to add support for a new sensor.
- Implement the
BnSensorPrivacyListenerinterface. For more details, see
- Register with the
SensorPrivacyManagerand obtain the state of the tile on startup. For more details, see
- Handle Sensors off state changes in the callback. For more
- Prevent access to the sensor data when the tile is enabled. For more
Removing Sensors off
As a developer tool for testing, Sensors off is hidden because a user must first enable developer mode, then choose to make the tile available in settings.
If you don't want to support Sensors off on your devices,
remove the service tag from
packages/apps/Settings/AndroidManifest.xml. If you remove the
service tag, the Sensors off tile won't be available to enable
from the developer quick settings tiles page.
Changing the Sensors off UI
There are two elements that can be customized for the Sensors off UI: the icon displayed for the developer quick settings tile and the icon displayed in the status bar when the tile is enabled. To customize the look of these icons, replace these files:
- Quick settings tile icon:
- Status bar icon:
As an optional developer tool, there are no CTS tests for this feature.
You can test manually by installing an app from Google Play that reads and displays all of the device’s sensors. When you enable the Sensors off tile, ensure that none of the values for the sensors change, the microphone audio is silent, and the camera isn't accessible.