[Android] Android アプリからScreenShotを撮る

端末で「電源ボタン」+「音量下」の同時押しでスクリーンショットが撮れますがタイミングが合いにくかったり、プログラムで画面のショットを取りたいときがありますが、方法は色々可能です。
 
screenshot 01 - [Android] Android アプリからScreenShotを撮る

Android Studio 3.5.3
Android 9.0

 

R904D.P21641J - [Android] Android アプリからScreenShotを撮るimpression?a id=2545321&p id=969&pc id=1263&pl id=47128 - [Android] Android アプリからScreenShotを撮る

Screen Capture

 
注)このスクリーンショットはAndroid 10では以下のようなwarningが出ます。
warning screenshot - [Android] Android アプリからScreenShotを撮る

これはAndroid Studioに入っているSampleを元に切り出したものですけれど…

というエラーが出ているので、Foreground Serviceに変更しないといけないようで、
getMediaProjection()の前にstartforeground()でサービスに入る実装になります。

Android 9.0までは似たようなダイアログが出るだけで済むのですが、厳しくなったようですね。
 

 

アプリでスクリーンショット

 
以下はAPI28まで使えるサンプルコードです。
adb コマンドでのキャプチャはまだできます。
~~~~~~~~~~~~~~~~~~~~~

Android Studioから「New」「Import Sample」のサンプルの中に「Screen Capture」があります。このサンプルはFragmentになっているのでActivityに落として簡略化してImageViewで表示させるように修正しました。
 
アプリでスクリーンショットをユーザーに無断で撮るのは、ユーザーの重要な情報も取得できてしまうため許可を得る工程が入ります。
この画像をアプリの背景とし、そのスクリーンショットを取って画面上に表示させてみます。
 
img 107x150 - [Android] Android アプリからScreenShotを撮る
 
MediaProjection を使っていますが、Andorid5.0以降の機能です。
 
MainActivity.java

 
テストするための画像img.jpgを探して入れておきます。
activity_main.xml

 
strings.xml

 
スクリーンショットが撮れました。
この画像を端末内に保存してギャラリーで見たり、メールで送ったり、をPCに取り込んだりすることが可能です
 

 

adb コマンドを使ってキャプチャする

 
adbコマンドからもキャプチャすることができます。これはAndroid 10でも今のところ使えます。

端末のディレクトリーで書き込み可能領域にtext.pngでスクリーンショット画像を撮って保存する例です。

その後で、その画像をPCのc:\tempに取り込めばいいのでこういうコマンドでいけます。

 
adbコマンドについて、書き込み可能領域の確認はadb コマンドを参照してください。

 

emulatorでのスクリーンショット

 

Android Studioでアプリを実行、カメラアイコンの「Screen Capture」をクリックします
 

screenshot 300x298 - [Android] Android アプリからScreenShotを撮る
 

実行中のスクリーン表示されます
 

screenshot2 300x257 - [Android] Android アプリからScreenShotを撮る
 

実行ターゲットによっては、大きすぎる場合もありますが、そんな時は虫眼鏡アイコンの「-」をクリックして画像を小さく表示します。ここで拡大・縮小はあくまで表示だけです。
 

screenshot3 300x258 - [Android] Android アプリからScreenShotを撮る
 
 

だいぶ見やすくなりました。更にFrame Screenshotなどの効果も演出できます。

これで「Save」すると出来上がりです。

screenshot5 300x160 - [Android] Android アプリからScreenShotを撮る

アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう。

TECH ACADEMY
Androidアプリコース



Code Camp
現役エンジニアによるオンラインプログラミングスクール【CodeCamp】


直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。



侍エンジニア塾
侍エンジニア塾 無料体験レッスン


とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする