/Android10CameraBasic

Android 10 Camera basics with Scoped Storage

Primary LanguageKotlin

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
camera camera confirm load write Screen Shot 2020-08-21 at 1 00 06 PM (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

  1. 'Take Photo' Google camera tutorial with code
    https://developer.android.com/training/camera/photobasics#java

  2. "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

  3. "How to get Bitmap from an Uri", StackOverflow
    https://www.generacodice.com/en/articolo/730776/How-to-get-Bitmap-from-an-Uri

  4. "Working with Scoped Storage" by Fernando García Álvarez, October 18, 2019
    https://proandroiddev.com/working-with-scoped-storage-8a7e7cafea3

  5. "Scoped Storage on Android 11" by Fernando García Álvarez, February 19, 2020
    https://proandroiddev.com/scoped-storage-on-android-11-2c5da70fb077

  6. "Android Camera App with Examples" by Android Tutorial
    https://www.tutlane.com/tutorial/android/android-camera-app-with-examples

  7. "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

  8. Google documentation Scoped storage sample
    https://github.com/android/storage-samples

  9. 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

  10. 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

  11. Media Store - createTrashRequest
    https://developer.android.com/training/data-storage/shared/media#remove-item