android 實現按鍵精靈
轉載文章請註明出處:http://blog.csdn.net/dangxw_/article/details/17960571
程式經常需要除錯,需要程式自動按鍵,或者某些繁瑣操作,比如遊戲外掛,需要按鍵精靈來完成。
android 提供給開發者傳送模擬按鍵的類Instrumentation:
public classInstrumentation
extends Object可以模擬傳送很多事件(這些方法寫在thread類裡,所以部分帶有thread的sleep方法):
傳送back事件:
傳送enter事件:(在keyevent中有很多按鍵碼,該方法可以傳送任何按鍵的事件)private void back() { inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); }
private void enter() throws InterruptedException
{
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_NUMPAD_ENTER);
sleep(500);
}
根據座標點發送點選事件:
private void click(int x ,int y) throws InterruptedException { inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, x, y, 0)); sleep(500); inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0)); }
根據座標傳送長按事件:
private void longClick(int x, int y) throws InterruptedException{ inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, x, y, 0)); sleep(2000); inst.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0)); }
傳送向下事件:
private void move() throws InterruptedException
{
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
sleep(500);
inst.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_DOWN);
sleep(500);
}
傳送move移動事件:
其實我感覺還是應該傳送座標點事件,只是把down和up之間傳送部分move但是我實現起來卻沒有達到我想要移動的距離的效果,不貼出程式碼了,有點錯誤,期待閱讀者的意見
但是這些程式碼的執行,需要給出
<uses-permission android:name = "android.permission.INJECT_EVENTS"/>
許可權。
而且需要系統許可權:android:sharedUserId="android.uid.system"
另外使用的手機必須root ,還要獲取系統簽名。
獲取系統簽名的具體步驟明天寫吧。
寫了一個demo 程式,傳遞一個簡單的點選事件,這種方法可以實現跨程序點選,就是可以在後臺傳送點選事件,點選其他軟體的元件。
demo下載地址:http://download.csdn.net/detail/dangxw_/7005525
---------------------------------------------------------------------------------------------------------------------分割線
看到自己的資源被噴了,才發現系統簽名過程一直沒有更新。當時是因為閒的沒事而且csdn上沒有了下載積分才記錄下來這個虛擬按鍵過程的,最近一直比較忙,而且下班後住的地方沒有網,所以一直沒有寫完。總之不好意思。
下載完那個demo之後匯入,然後匯出未簽名的apk,點選專案,右鍵>android tools>Export unsigned application package.
然後下載簽名工具,http://download.csdn.net/detail/dangxw_/7106645 裡面自帶的簽名是4.3的好像,具體記不清了。
如果想要換個系統版本的簽名,直接替換掉 platform.x509.pem,platform.pk8這兩個檔案就行了。
下載這兩個檔案的步驟詳見:http://blog.sina.com.cn/s/blog_a72ec20c0101d7cx.html
那兩個簽名的路徑為:build/target/product/security