Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Capture view and Register to gallery

Capture view and Register to gallery

umechanhika

January 17, 2020
Tweet

More Decks by umechanhika

Other Decks in Programming

Transcript

  1. Capture view
    and
    Register to gallery

    View Slide

  2. About me
    Hikaru Umetsu
    (@umechanhika)
    WealthNavi Inc.
    Individual developer
    Fav: Android & Flutter
    Individual
    Job

    View Slide

  3. What is “capture”?
    App screen
    Image file

    View Slide

  4. Overview
    Capture view
    File storage access
    Register to gallery
    Summary

    View Slide

  5. Capture view
    view.isDrawingCacheEnabled = true
    val cache = view.drawingCache
    val bitmap = Bitmap.createBitmap(cache)
    val bitmap = view.drawToBitmap()
    val canvas = Canvas(bitmap)
    view.draw(canvas)
    Deprecated New
    https://github.com/umechanhika/playground/blob/master/android/AddScreenshotToGallery/app/
    src/main/java/com/example/addscreenshottogallery/ui/util/ScreenshotUtil.kt

    View Slide

  6. File storage access
    In this case: MediaStore API
    Is this ...
    Media file? Yes
    Shareable? Yes
    Removed on app uninstalled? No
    https://developer.android.com/training/data-storage

    View Slide

  7. Permission
    https://developer.android.com/training/data-storage
    No need on Android 10 or higher
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"
    android:maxSdkVersion="28" />

    View Slide

  8. Register to gallery
    Android 10 or higher
    Android 9 or lower
    Create ContentValues Save bitmap
    Create ContentValues Save bitmap Register to MediaStore
    Register to MediaStore

    View Slide

  9. Register to gallery
    Android 10 or higher
    Android 9 or lower
    Create ContentValues Save bitmap
    Create ContentValues Save bitmap Register to MediaStore
    Register to MediaStore

    View Slide

  10. Register to gallery
    ContentValues().apply {
    put(MediaStore.Images.Media.DISPLAY_NAME, "fileName.jpg")
    put(MediaStore.Images.Media.TITLE, "fileName")
    put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
    put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis() / 1_000)
    }
    Create ContentValues
    https://github.com/umechanhika/playground/blob/master/android/AddScreenshotToGallery/app/
    src/main/java/com/example/addscreenshottogallery/ui/util/ScreenshotUtil.kt
    Common

    View Slide

  11. Register to gallery
    ContentValues().apply {
    put(MediaStore.Images.Media.DISPLAY_NAME, "fileName.jpg")
    put(MediaStore.Images.Media.TITLE, "fileName")
    put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
    put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis() / 1_000)
    }
    Create ContentValues
    https://github.com/umechanhika/playground/blob/master/android/AddScreenshotToGallery/app/
    src/main/java/com/example/addscreenshottogallery/ui/util/ScreenshotUtil.kt
    Common

    View Slide

  12. Register to gallery
    ContentValues().apply {
    put(MediaStore.Images.Media.DISPLAY_NAME, "fileName.jpg")
    put(MediaStore.Images.Media.TITLE, "fileName")
    put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
    put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis() / 1_000)
    }
    Create ContentValues
    https://github.com/umechanhika/playground/blob/master/android/AddScreenshotToGallery/app/
    src/main/java/com/example/addscreenshottogallery/ui/util/ScreenshotUtil.kt
    Common

    View Slide

  13. Register to gallery
    ContentValues().apply {
    put(MediaStore.Images.Media.DISPLAY_NAME, "fileName.jpg")
    put(MediaStore.Images.Media.TITLE, "fileName")
    put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
    put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis() / 1_000)
    }
    Create ContentValues
    https://github.com/umechanhika/playground/blob/master/android/AddScreenshotToGallery/app/
    src/main/java/com/example/addscreenshottogallery/ui/util/ScreenshotUtil.kt
    Common

    View Slide

  14. Register to gallery
    ContentValues().apply {
    put(MediaStore.Images.Media.DISPLAY_NAME, "fileName.jpg")
    put(MediaStore.Images.Media.TITLE, "fileName")
    put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg")
    put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis() / 1_000)
    }
    Create ContentValues
    https://github.com/umechanhika/playground/blob/master/android/AddScreenshotToGallery/app/
    src/main/java/com/example/addscreenshottogallery/ui/util/ScreenshotUtil.kt
    Common

    View Slide

  15. Register to gallery
    Register to MediaStore
    contentValues.apply {
    put(
    MediaStore.Images.Media.RELATIVE_PATH,
    "${Environment.DIRECTORY_PICTURES}/DirectoryName"
    )
    put(MediaStore.MediaColumns.IS_PENDING, 1)
    }
    contentResolver.run {
    uri = insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues) ?: return
    // ...
    }
    Android 10
    or higher
    https://github.com/umechanhika/playground/blob/master/android/AddScreenshotToGallery/app/
    src/main/java/com/example/addscreenshottogallery/ui/util/ScreenshotUtil.kt

    View Slide

  16. Register to gallery
    Save bitmap
    contentResolver.run {
    uri = insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues) ?: return
    openOutputStream(uri).use { bitmap.compress(Bitmap.CompressFormat.JPEG, 100, it) }
    contentValues.put(MediaStore.MediaColumns.IS_PENDING, 0)
    update(uri, contentValues, null, null)
    }
    Android 10
    or higher
    https://github.com/umechanhika/playground/blob/master/android/AddScreenshotToGallery/app/
    src/main/java/com/example/addscreenshottogallery/ui/util/ScreenshotUtil.kt

    View Slide

  17. Completed

    View Slide

  18. Drawing cache is deprecated.
    Use MediaStore API.
    No need permission on Android 10 or higher
    Register process is different from Android 10 or higher
    Summary

    View Slide

  19. Thanks!

    View Slide