1. 程式人生 > >android 實現按鍵精靈

android 實現按鍵精靈

轉載文章請註明出處:http://blog.csdn.net/dangxw_/article/details/17960571

程式經常需要除錯,需要程式自動按鍵,或者某些繁瑣操作,比如遊戲外掛,需要按鍵精靈來完成。

android 提供給開發者傳送模擬按鍵的類Instrumentation:

public class

Instrumentation

extends Object

可以模擬傳送很多事件(這些方法寫在thread類裡,所以部分帶有thread的sleep方法):

傳送back事件:

private void back()
{
	inst.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);
				
}
傳送enter事件:(在keyevent中有很多按鍵碼,該方法可以傳送任何按鍵的事件)
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