Android 模擬系統事件(三)

2021-06-18 03:34:29 字數 2601 閱讀 4873

簡介

android系統是基於linux核心的,而linux核心繼承和相容了豐富的unix系統程序間通訊(ipc)機制。binder其實也不是android提出來的一套新的程序間通訊機制,它是基於openbinder來實現的。binder是一種程序間通訊機制,它是一種類似於com和corba分布式元件架構,通俗一點,其實是提供遠端過程呼叫(rpc)功能。

功能向其它程序注入事件,比如觸屏、單擊、按鍵等人為事件。

我們已經知道了android系統程序互動是採用什麼機制了。那麼如何實現程序互動?他的原理是什麼?

模擬原理是對驅動傳送訊息,就是linux裡面的input子系統。

命令格式: sendevent /dev/input/eventx [type] [key] [value]

其中/dev/input/eventx 對應的是裝置,可以用getevent檢視可用裝置。

實現1、獲取真機裝置事件資訊,這可以參考獲取小公尺裝置資訊的文章。

2、通過程式向手機超級終端寫入命令。(注意:需要獲取root許可權)

**關鍵**如下:

string commands = new string[5];

log.d(pbconstants.tag, "z=" + z);

z = 0;

commands[0] = "sendevent /dev/input/event" + z + " 1 116 1";

commands[1] = "sendevent /dev/input/event" + z + " 0 0 0";

commands[2] = "sleep 1";

commands[3] = "sendevent /dev/input/event" + z + " 1 116 0";

commands[4] = "sendevent /dev/input/event" + z + " 0 0 0";

process suprocess = runtime.getruntime().exec("su");

dataoutputstream os = new dataoutputstream(suprocess.getoutputstream());

// execute commands that require root access

for (int i = 0; i < 5; i++)

os.writebytes("exit\n");

os.flush();

string commands = new string[9];

event_id++;

commands[0] = "sendevent /dev/input/event" + 1 + " 3 57 " + event_id;

commands[1] = "sendevent /dev/input/event" + 1 + " 3 57 0";

commands[2] = "sleep 1";

commands[3] = "sendevent /dev/input/event" + 1 + " 3 53 " + x;

commands[4] = "sendevent /dev/input/event" + 1 + " 3 54 " + y;

commands[5] = "sendevent /dev/input/event" + 1 + " 0 0 0";

commands[6] = "sleep 1";

commands[7] = "sendevent /dev/input/event" + 1 + " 3 57 4294967295";

commands[8] = "sendevent /dev/input/event" + 1 + " 0 0 0";

process suprocess = runtime.getruntime().exec("su");

dataoutputstream os = new dataoutputstream(suprocess.getoutputstream());

// execute commands that require root access

for (int i = 0; i < 9; i++)

os.writebytes("exit\n");

os.flush();

process suprocess = runtime.getruntime().exec("su");

dataoutputstream os = new dataoutputstream(suprocess.getoutputstream());

os.writebytes("input keyevent keycode_menu\n");

os.writebytes("exit\n");

os.flush();

return ((suprocess.waitfor() != 255) ? true : false);

推薦文章

programmatically injecting events on android

touchutils

android自動化測試shell指令碼

Android 4 0 事件系統

2013 01 31 15 13 295人閱讀收藏 舉報 事件系統簡介 1.android 事件系統,它解決的是如何將按鍵 滑鼠 觸屏訊息從收集到最終將之傳送到焦點視窗進行處理的問題 2.android 事件處理 流程分兩部分,一部分是從 framework 開始,如何 從底層讀取事件並分發 給ac...

Qt事件系統之三 鍵盤事件

qkeyevent 類用來描述乙個鍵盤事件。當鍵盤按鍵被按下或者被釋放時,鍵盤事件便會被傳送給擁有鍵盤輸人焦點的部件。qkeyevent 的 key 函式可以獲取具體的按鍵,對於 qt 中給定的所有按鍵,可以在幫助中檢視 qt key 關鍵字。需要特別說明的是,回車鍵在這裡是 qt key retu...

同步Android手機系統日曆事件(日程)

之前開發的應用要求的乙個功能是同步手機系統日曆日程,發現網上也沒什麼總結好的答案,查閱了些資資料沒有發現android有獲取指定日期事件的方法,於是自己就研究了一番。1 先在android的配置檔案中新增讀取日曆的許可權 android name android.permission.read ca...