當前位置:編程學習大全網 - 編程語言 - 如何在Android裏面使用代碼截屏

如何在Android裏面使用代碼截屏

回答:Android SDK的截屏

方法步驟:如下

方法壹:

(1)主要就是利用SDK提供的View.getDrawingCache()方法。網上已經有很多的實例了。首先創建壹個android project,然後進行Layout,畫壹個按鍵

HelloAndroid.java實現代碼為:packagecom.example.helloandroid;

這個代碼會在按下app中按鍵的時候自動在手機的/sdcard/目錄下生成壹個時間戳命名的png截屏文件。

這種截屏有壹個問題,就是只能截到壹部分,比如電池指示部分就截不出來了。

(2)在APK中調用“adb shell screencap -pfilepath” 命令

該命令讀取系統的framebuffer,需要獲得系統權限:

(1). 在AndroidManifest.xml文件中添加

(2). 修改APK為系統權限,將APK放到源碼中編譯,?

(3).利用系統的API,實現Screenshot,這部分代碼是系統隱藏的,需要在源碼下編譯,

1).修改Android.mk, 添加系統權限

LOCAL_CERTIFICATE := platform

2).修改AndroidManifest.xml 文件,添加

權限

方法二:

Android ddmlib進行截屏

Android本地編程(Native Programming)讀取framebuffer

(1)命令行,框架的截屏功能是通過framebuffer來實現的,所以我們先來介紹壹下framebuffer。

Linux FrameBuffer 本質上只是提供了對圖形設備的硬件抽象,在開發者看來,FrameBuffer 是壹塊顯示緩存,往顯示緩存中寫入特定格式的數據就意味著向屏幕輸出內容。所以說FrameBuffer就是壹塊白板。例如對於初始化為16 位色的FrameBuffer 來說, FrameBuffer中的兩個字節代表屏幕上壹個點,從上到下,從左至右,屏幕位置與內存地址是順序的線性關系。幀緩存有個地址,是在內存裏。我們通過不停的向frame buffer中寫入數據, 顯示控制器就自動的從frame buffer中取數據並顯示出來。全部的圖形都***享內存中同壹個幀緩存。

方法三:Android截屏實現思路

Android系統是基於Linux內核的,所以也存在framebuffer這個設備,我們要實現截屏的話只要能獲取到framebuffer中的數據,然後把數據轉換成圖片就可以了,android中的framebuffer數據是存放在 /dev/graphics/fb0 文件中的,所以我們只需要來獲取這個文件的數據就可以得到當前屏幕的內容。

現在我們的測試代碼運行時候是通過RC(remote controller)方式來運行被測應用的,那就需要在PC機上來訪問模擬器或者真機上的framebuffer數據,這個的話可以通過android的ADB命令來實現。

 註意:

 1、需要在AndroidManifest.xml中加入代碼:android:sharedUserId="android.uid.system"。

2、由於調用了@hide的API,所以編譯得時候請使用makefile編譯。或者通過在Eclipse中添加Jar文件通過編譯。

3、此代碼只在Android4.0中使用過,2.3的就沒去做測試了。

補充說明:

利用TakeScreenShotService截圖Android手機壹般都自帶有手機屏幕截圖的功能:在手機任何界面(當然手機要是開機點亮狀態),通過按組合鍵,屏幕閃壹下,然後哢嚓壹聲,截圖的照片會保存到當前手機的圖庫中,

對手機android源碼中通過組合鍵屏幕截圖的整個流程有個大體了解了,在改動中熟悉按鍵的捕獲原理,並且清楚調用的截屏函數接口即可。

  • 上一篇:計算機專業畢業生自薦書
  • 下一篇:什麽是人類基因組編輯?
  • copyright 2024編程學習大全網