Android11CameraBasic
Android 11 Camera basics with Scoped Storage.
This exercise is an extension from Google documentation, Take Photo [1]
For Android 11, don't call resolveActivity
// Don't call resolve in Android 11, API 30
// if (takePictureIntent.resolveActivity(packageManager) != null) {
Camera Basics
Returns bitmap
val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO)
Returned data is bitmap in memory
Then we persist into storage following Fernando[4] tutorial.
Persist -> photoUri (scoped storage)
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI)
startActivityForResult(takePictureIntent, REQUEST_TAKE_PHOTO)
Returned data is null; retrieve bitmap from photoUri as described in reference [2]
Android 11 Scoped Storage
Scope creeped into 11 since it is no longer an option.
Permission is required before moving media into trash bin.
'Trashed' status is a MediaStore marking on the file's meta-data.
'Untrash' can be performed prior to the expiration time via MediaStore update query.
Camera -> Save -> Load -> Overwrite -> Trash
(Recoverable)
Android Studio 4.0
Build #AI-193.6911.18.40.6514223, built on May 20, 2020
Runtime version: 1.8.0_242-release-1644-b3-6222593 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.15.5
GC: ParNew, ConcurrentMarkSweep
Memory: 1981M
Cores: 8
Phone
Samsung Galaxy S9
Model # SM-G960U
Hardware version REV1.1
Android version 10
Kernel version 4.9.186
Knox version 3.4.1
References
-
'Take Photo' Google camera tutorial with code
https://developer.android.com/training/camera/photobasics#java -
"Getting null uri in onActivityResult after take image capture [duplicate]", answer by bhagyawant biradar, March 27, 2019
https://stackoverflow.com/questions/55370426/getting-null-uri-in-onactivityresult-after-take-image-capture -
"How to get Bitmap from an Uri", StackOverflow
https://www.generacodice.com/en/articolo/730776/How-to-get-Bitmap-from-an-Uri -
"Working with Scoped Storage" by Fernando García Álvarez, October 18, 2019
https://proandroiddev.com/working-with-scoped-storage-8a7e7cafea3 -
"Scoped Storage on Android 11" by Fernando García Álvarez, February 19, 2020
https://proandroiddev.com/scoped-storage-on-android-11-2c5da70fb077 -
"Android Camera App with Examples" by Android Tutorial
https://www.tutlane.com/tutorial/android/android-camera-app-with-examples -
"Scoped Storage on Android 11" by Fernando García Álvarez on DroidCon, March 24, 2020
https://www.droidcon.com/news-detail?content-id=/repository/collaboration/Groups/spaces/droidcon_hq/Documents/public/news/android-news/Scoped%20Storage%20on%20Android%2011 -
Google documentation Scoped storage sample
https://github.com/android/storage-samples -
MediaStore - Uri to query all types of files (media and non-media)
https://stackoverflow.com/questions/10384080/mediastore-uri-to-query-all-types-of-files-media-and-non-media -
The Android Open Source Project (Sample code) - MediaStore.java, copyright 2007 https://android.googlesource.com/platform/frameworks/base.git/+/master/core/java/android/provider/MediaStore.java https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/provider/MediaStore.java
-
Media Store - createTrashRequest
https://developer.android.com/training/data-storage/shared/media#remove-item