On devices running Android 11 or higher, the Android framework supports system cameras, which are camera devices that are visible only to processes with the android.permission.SYSTEM_CAMERA
permission and regular camera permissions. The android.permission.SYSTEM_CAMERA
permission, introduced in Android 11, has a protection level of system|signature
. This means that only apps installed on the system partition with or signed with the same certificate as the system can be granted this permission. Third-party public apps can't access system cameras.
System cameras are useful for device manufacturers that want to implement features that require access to a camera but are also restricted to privileged or system apps.
Because systems apps that are granted the android.permission.SYSTEM_CAMERA
permission must also have the android.permission.CAMERA
permission, users can choose to revoke normal CAMERA
permissions to prevent such an app from accessing the cameras on the device.
Implementation
To make a particular camera device a system camera, the camera HAL must advertise ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SYSTEM_CAMERA
in its capabilities list.
To create an app that has access to a system camera, the app must be allowlisted in the device-specific privapp-permissions.xml
file, which specifies the apps that the android.permission.SYSTEM_CAMERA
permission must be granted to.
Validation
To verify that no system cameras on the device can be discovered by a public app, run the android.permission.cts.Camera2PermissionTest.testSystemCameraDiscovery
CTS test.
All camera CTS tests run on system camera devices.