画面のスナップショットを撮影する

概要

Android で画面のスナップショットを撮影するアプリを作ります。 他のアプリが起動しているときにスナップショットを撮影するために、サービス経由でスナップショット撮影を行います。

確認環境

参考情報

解説

MediaProjection を使用することで画面のスナップショットを撮影できる。 他アプリを実行中やホーム画面など、様々な画面のスナップショットを撮影するためには Service で実行する必要がある。 MediaProjection を使用するためには startActivityForResult を呼び出す必要があるが、Service では呼び出せない。 そのため、MediaProjection を取得する Activity (サンプルコードでは CaptureActivity) を用意し、Activity を Service から起動する。 この Activity は表示されないようにし、MediaProjection 取得後に終了する。 取得した MediaProjection は、Service から参照できるように static フィールド (Kotlin では companion object) に保持する。 Service では、Activity が保持している MediaProjection を参照して利用する。

サンプルコードを動かすにあたって、スナップショット撮影を Service から起動するためのボタンが欲しい。 下記の内容に従ってボタンを作成する。

nosix.hatenablog.com

ボタンをタップしたら、サンプルコードの CaptureService::enableCapture メソッドを呼ぶようにする。