Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Capture view and Register to gallery
Search
umechanhika
January 17, 2020
Programming
81
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
120
My Workspace [2020/06版]
umechanhika
0
61
Badging for Tabs and Bottom Navigation
umechanhika
0
410
Shape Design with Material Components
umechanhika
3
280
Firebase MLKit AutoML Vision Edgeを触ってみた
umechanhika
3
600
Google Play Consoleの時間指定公開のハマりポイント
umechanhika
1
1.7k
UIテスト初心者のチームにUIテスト自動化を導入した話
umechanhika
0
120
GoogleI/Oアプリのようなフィルター機能を実装する
umechanhika
2
560
Jenkins + Bitbucketでアプリリリースを自動化してみた
umechanhika
1
710
Other Decks in Programming
See All in Programming
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
2
920
APNsからLive Activityを開始する話
yumnumm
0
170
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
170
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
golang-bob.pdf
iwatsukayura
0
130
dotNET_vulnclicker_intro.pdf
deka_morita
0
140
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
310
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
600
Jetpack Compose Mechanisms
skydoves
3
820
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
150
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
560
So, you think you're a good person
axbom
PRO
2
2.2k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
570
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Design in an AI World
tapps
1
350
Build your cross-platform service in a week with App Engine
jlugia
234
19k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
780
Agile that works and the tools we love
rasmusluckow
331
22k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
320
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!