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

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


Android Studio 3.5.3
Android 9.0

 




Screen Capture

 

注)このスクリーンショットはAndroid 10では以下のようなwarningが出ます。
1x1.trans - [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で表示させるように修正しました。
 
アプリでスクリーンショットをユーザーに無断で撮るのは、ユーザーの重要な情報も取得できてしまうため許可を得る工程が入ります。
この画像をアプリの背景とし、そのスクリーンショットを取って画面上に表示させてみます。
 
1x1.trans - [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」をクリックします
 

1x1.trans - [Android] Android アプリからScreenShotを撮る
 

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

1x1.trans - [Android] Android アプリからScreenShotを撮る
 

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

1x1.trans - [Android] Android アプリからScreenShotを撮る
 
 

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

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

1x1.trans - [Android] Android アプリからScreenShotを撮る

シェアする

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

フォローする