/LG-Q-Screenshots

Qボタンでスクリーンショットが撮れたら楽じゃね?

Primary LanguageJava

特徴

LGのAndroidタブレットに搭載されているQボタンでスクショを撮る

便利

全画面表示しているアプリのアニメを観ながら、ポチッとな!!

対応機種

  • Qua tab PX
  • Qua tab PZ
  • au LGT32 (動作確認端末)
  • とか?

概要

  1. ユーザー補助サービスBIND_ACCESSIBILITY_SERVICEを登録
  2. MediaProjectionでスクリーンショットを取れるようにする
  3. ユーザー補助サービスに接続
  4. ユーザー補助サービスで物理キー(ハードウェアキー)のイベントを拾う
  5. スクショの取得と保存を別スレッドで実行する
  6. MediaScannerに登録を依頼
  7. とりあえずトーストを出す(笑)

いつものように正常系しか実装していないので、参考程度にお願いします…

ちょっとハマったのは別スレッドのところ。
トーストでUIが動くと、キーイベントが無効化できず、本体のQボタンで設定済みアプリが動いてしまうのですよ、詳しい説明は… どこかで見たけど、メモってなかった…

と、画像を保存したらMediaScannerに登録しないと、ギャラリーに表示されないのを忘れていたので、サクッとコピペ(笑)

雑感

まず、スクショってどうやって撮るの?から始めて、MainActivityからスクショを撮れるのを確認してからサービスを作ったので、サービスから強引(static)にImageReaderなど参照してますが、よくよく調べてみるとAccessibilityServicetakeScreenshotなんてメソッドがあるから、もっとスマートな実装方法があるかもしれない。

AccessibilityService リファレンス
https://developer.android.com/reference/android/accessibilityservice/AccessibilityService

参考サイト

How to capture key events inside a service?
https://stackoverflow.com/questions/3229929/how-to-capture-key-events-inside-a-service?lq=1

Android Tips #40 AccessibilityService でユーザー補助サービスを作ってみる
https://dev.classmethod.jp/smartphone/android/android-tips-40-accessibility-service/

ANDROID 5.0 アプリからスクリーンショットを撮影する
https://techbooster.org/android/application/17026/

MediaScannerに登録を依頼する方法
https://qiita.com/wasnot/items/ae1e6282d2c33626b604

apk

とりあえずビルドしたapp-release-unsigned.apkも置いときますね!