hierachyview的實現框架

一、檢驗一臺手機是否開啓了View Server的辦法爲:
adb shell service call window 3
若返回值是:Result: Parcel(00000000 00000000 '........')" 說明View Server處於關閉狀態
若返回值是:Result: Parcel(00000000 00000001 '........')" 說明View Server處於開啓狀態

若是一臺可以打開View Server的手機(Android開發版手機 、模擬器or 按照本帖步驟給系統打補丁的手機),我們可以使用以下命令打開View Server:
adb shell service call window 1 i32 4939
使用以下命令關閉View Server:
adb shell service call window 2 i32 4939

二、如何獲取活動的Activity
這是怎麼實現的呢? 這需要向ViewerServer發送"LIST"命令,看下面的代碼:


三、如何獲取Activity的控件樹 
獲取控件樹信息的命令是DUMP,後面要接對應的Activity的hash code,如果使用ffffffff作爲參數,那麼就是取最前端的Activity。以com.android.launcher2.Launcher爲例,它的hash code是4507aa28,看代碼:


ViewServer
writeValue(mClient, VALUE_PROTOCOL_VERSION);//COMMAND_PROTOCOL_VERSION = "PROTOCOL"
writeValue(mClient, VALUE_SERVER_VERSION);//COMMAND_SERVER_VERSION = "SERVER"
mWindowManager.viewServerListWindows(mClient);//COMMAND_WINDOW_MANAGER_LIST = "LIST"
mWindowManager.viewServerGetFocusedWindow(mClient);//COMMAND_WINDOW_MANAGER_GET_FOCUS = "GET_FOCUS"
windowManagerAutolistLoop();//COMMAND_WINDOW_MANAGER_AUTOLIST = "AUTOLIST"
mWindowManager.viewServerWindowCommand(mClient, command, parameters);


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章