This story was originally published and last updated .
Android may have started with the mantra that developers are allowed to do anything as long as they can code it, but things have changed over the years as security and privacy have become higher priorities. Every major update in recent decades has included features like added restrictions in the name of protecting users, but some offerings may not have been very necessary. Another Android 11 trade-off has arisen, this time removing the ability for users to select third-party camera apps to take pictures or videos of other apps, forcing users to rely solely on the built-in camera app .
At the heart of this change is one of the defining features of Android: the Intent system. Let’s say you need to take a picture of a novelty coffee goat to sell through an auction app. Since the auction app was not built for photography, the developer chose to leave that to a proper camera app. This is where the Intent system comes into play. Developers are just making an application with a few criteria and Android will ask users to choose from a list of installed apps to do the job.
Camera picker on Android 10.
However, things will change with Android 11 for apps that ask for photos or videos. Three specific intentions will stop working as before, including: VIDEO_CAPTURE, IMAGE_CAPTURE, and IMAGE_CAPTURE_SECURE. Android 11 will now automatically provide the pre-installed camera app to perform these actions without ever having to look for other apps to fill the role.
Starting in Android 11, only pre-installed system camera apps can respond to the following intent actions:
If more than one pre-installed system camera app is available, the system presents a dialog for the user to select an app. If you want your app to use a specific third-party app to capture images or videos for them, you can make these intentions explicit by setting a package name or component for the purpose.
Google describes the change in a list of new behaviors in Android 11, and confirmed it further in the Issue Tracker. Privacy and security are cited as the reason, but there is no discussion about what exactly made these intentions dangerous. Maybe some users were abused to set up a malicious camera app by default and then use it to record things that should have been kept private.
“… we believe it is the right trade-off to protect the privacy and security of our users.” – Google Issue Tracker.
Not only does Android 11 take the liberty to automatically launch the pre-installed camera app when they apply, it also prevents app developers from easily providing their own interface to simulate the same functionality. I ran a test with some simple code to query the camera apps on a phone, and then ran it on devices running Android 10 and 11 with the same set of camera apps installed. Android 10 returned a full set of apps, but Android 11 reported nothing, not even Google’s own pre-installed Camera app.
Above: Debugger view on Android 10. Below: Same view on Android 11.
However, as CommonsWare’s Mark Murphy points out, Google provides a solution for developers, though it’s not very useful. The documentation advises explicitly checking on installed camera apps by their package names – which means developers should choose preferred apps in advance – and send users directly to those apps. Of course, there are other ways to get options without identifying all the package names, such as getting a list of all the apps and then manually searching for intensity filters, but this seems like too complicated.
The new behavior is maintained in at least the current Android 11 beta release, and it will happen with all apps, regardless of whether they target API 30 or lower. We do not yet know if the Android CTS (Compatibility Test Suite) requires this behavior or if OEMs will allow it to change back to the previous rules, but it is likely that this will become the default going forward.
This is certainly not a devastating change, and for many users who are already standard on their built-in camera, it will be completely transparent. And most apps will still allow users to switch to their preferred camera to grab a good shot, and then download from the gallery. However, this means more work for users, and it’s a kick in the pants for people who regularly snap profile photos with a filter than for those who rely on G Cam ports to replace their stock camera. In addition, some apps are not allowed for different workflows, which means you are sitting with whatever camera app there is.
Google attributes the change to possible geotag hijacking
In a response to The Verge, Google stated that this change was made to “keep bad actors from potentially harassing your location.” This statement was also added in an update to the list of changes in Android 11, along with more technical details and a clarification that this does not prevent the ability to install and use third-party camera apps.
This is designed to ensure that the EXIF location metadata is processed correctly based on the location rights defined in the app that sends the intent.
In order to receive EXIF location metadata from the pre-installed system camera app when using intents that have one of the previous intents actions, you must declare your app
ACCESS_MEDIA_LOCATION
next to theACCESS_COARSE_LOCATION
ofACCESS_FINE_LOCATION
permission.If you want a specific third-party camera app to handle the intent of your app, you can do so by explicitly specifying the package name of the third-party camera app to pursue the intent.
This change does not affect the ability of users to install and use any camera app to create images or videos directly. A user can set up a third-party app as the default camera app. This change also does not affect intensive actions initiating the user-specified default camera app, including
android.provider.MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA
,android.provider.MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE
, ofandroid.provider.MediaStore.INTENT_ACTION_VIDEO_CAMERA
.
Retrieving EXIF data this way has actually been documented in the past when Shutterfly was caught doing it in 2019. This change will limit the easiest way to hijack location data, but it does leave some solutions like calling directly to camera apps or ask users to take photos and upload them from a media provider. Google may need to take additional steps to close the door completely on this tactic.