Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Capture view and Register to gallery
Search
umechanhika
January 17, 2020
Programming
70
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Capture view and Register to gallery
umechanhika
January 17, 2020
More Decks by umechanhika
See All by umechanhika
My Workspace [2020/08版]
umechanhika
0
110
My Workspace [2020/06版]
umechanhika
0
57
Badging for Tabs and Bottom Navigation
umechanhika
0
390
Shape Design with Material Components
umechanhika
3
270
Firebase MLKit AutoML Vision Edgeを触ってみた
umechanhika
3
590
Google Play Consoleの時間指定公開のハマりポイント
umechanhika
1
1.6k
UIテスト初心者のチームにUIテスト自動化を導入した話
umechanhika
0
120
GoogleI/Oアプリのようなフィルター機能を実装する
umechanhika
2
550
Jenkins + Bitbucketでアプリリリースを自動化してみた
umechanhika
1
700
Other Decks in Programming
See All in Programming
関数型プログラミングのメリットって何だろう?
wanko_it
0
190
分散システム、なんですぐ死んでしまうん?耐障害性を高めたいあなたのためのレジリエンスパターン入門
mshibuya
7
6.9k
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
230
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
120
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
280
ソフトウェア設計に溶けるインフラ ― AWS CDK のインフラ認識論
konokenj
2
640
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
170
霧の中の代数的エフェクト
funnyycat
1
430
初めてのKubernetes 本番運用でハマった話
oku053
0
130
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
110
What's New in Android 2026
veronikapj
0
190
Built Our Own Background Agent at LayerX #aidevex_findy
layerx
PRO
8
3.3k
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
55
12k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
160
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
240
Git: the NoSQL Database
bkeepers
PRO
432
67k
A better future with KSS
kneath
240
18k
Six Lessons from altMBA
skipperchong
29
4.3k
Unsuck your backbone
ammeep
672
58k
HDC tutorial
michielstock
2
750
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
350
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
190
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
760
Transcript
Capture view and Register to gallery
About me Hikaru Umetsu (@umechanhika) WealthNavi Inc. Individual developer Fav:
Android & Flutter Individual Job
What is “capture”? App screen Image file
Overview Capture view File storage access Register to gallery Summary
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
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
Permission https://developer.android.com/training/data-storage No need on Android 10 or higher <uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
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
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
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
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
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
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
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
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
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
Completed
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
Thanks!