何気なく使っているFramework 第7回 スクリーンショット

今回から確認OSバージョンをAndroid OS 4.0.1_r1に変更しました。

確認OSバージョン

Android OS 4.0.1_r1 ICS

スクリーンショット

ICSから端末単体でスクリーンショットが撮れるようになりました。
とりあえず、frameworks内の確認!!

スクリーンショットが実行されるまでの流れ

  1. Native層のInputDispatcherからinterceptKeyBeforeQueueingをコール
  2. 一旦、Java層にコールバック
  3. InputManagerを経てPhoneWindowManager#interceptKeyBeforeQueueing
    1. interceptKeyBeforeQueueing
    2. interceptScreenshotChord()
    3. mScreenshotChordLongPress#run
    4. takeScreenshot()
  4. SystemUIに新たに追加されたService、TakeScreenshotService
    1. run()
  5. GlobalScreenshot#takeScreenshot
  6. Surface.screenshotをコールし画面イメージのBitmap取得
  7. アニメーションして保存

確認しておいた方がいいソース

\frameworks\base\services\input
- InputDispatcher.cpp
- InputManager.cpp

\frameworks\base\policy\src\com\android\internal\policy\impl
- PhoneWindowManager.java

\frameworks\base\packages\SystemUI\src\com\android\systemui\screenshot
- GlobalScreenshot.java
- TakeScreenshotService.java

簡易クラス図