2010年12月29日 星期三

[Android] Screen capture for Android

雖然Android可以透過ddms抓screen shot, 不過這樣畢竟沒iOS方便, iOS只要按個熱鍵就可以抓了, 不用接著電腦

要在Android上實現這功能其實也不難(不過,應該只能跑在rooted device吧?本文介紹的是直接跟AOSP一起build用platform certificate)

第一個直覺想到的是直接access framebuffer, 不過這樣實在太醜了, 我想要做的是直接利用Android既有的framework

想到framebuffer在往上一層就是surfaceflinger了, 稍微掃一下code果然發現有captureScreen這種東西, 所以下一步就是grep一下找看看範例囉!!沒想到, 運氣真好, 一下子就在 frameworks/base/services/surfaceflinger/tests/screencap 這邊找到範例, 還是一個standalone的程式

不過我想做的是直接收一個Intent就可以把screen capture到SD卡, 所以這個東西還要做進一步包裝, 於是動手把它包裝成JNI, 並寫了一個簡單的BroadcastReceiver去呼叫他.....花不到一個小時...搞定!!! XD

Source在這邊

不過, 這不是我原本想做的東西....繼續改... :P

2 則留言:

  1. 博主您好,在運行這段代碼時我遇到一些困難,ScreenCap.java 中這一句 “System.loadLibrary("scrcap");“ 產生錯誤 “java.lang.UnsatisfiedLinkError: Library scrcap not found”
    2.1,2.2,2.3都是這樣,我是菜鳥,如果方便的話,可以告訴我怎麼解決嗎?

    回覆刪除
  2. 還有,您這個方法也需要先取得root權限嗎?

    回覆刪除