Android 跨進程類比按鍵(KeyEvent )執行個體詳解_Android

來源:互聯網
上載者:User

  Android 解決不同進程發送KeyEvent 的問題

最近在做有關於Remote Controller 的功能,該功能把手機做成TV的遙控器來處理。在手機的用戶端發送訊息到TV的android 服務端,服務端接收到用戶端的請求訊息,類比KeyEvent命令,發送Key值。

 最簡單的發送命令為如下代碼:

 public static void simulateKeystroke(final int KeyCode) {     new Thread(new Runnable() {            public void run() {        // TODO Auto-generated method stub        try {                    Instrumentation inst=new Instrumentation();          inst.sendKeyDownUpSync(KeyCode);        } catch (Exception e) {          // TODO: handle exception        }      }    }).start();  }

這種方法在當前的介面和相同的進程上是沒有問題的,可以實現的基本的需求。但當我還是把服務開啟著,按HOME將服務或者介面退出到後台時,再通過用戶端向服務端服務發送訊息使其類比按鍵時,不幸的事情發送了:

Injecting to another application requires INJECT_EVENTS permission

提示沒有 INJECT_EVENTS這個許可權。沒則加之,在AndroidManifest.xml檔案裡面添加該許可權,再運行,問題還是沒有解決,原因是上面代碼最終還是調用的WindowsManagerService 裡面的injectKeyEvent方法,該方法會去驗證你當前的程式的pid和uid,如果兩者在分發key 鍵時返回-1則會提示上面的error.

 好了,廢話一大堆,下面到了真正解決這一問題的方法了。

網上各種google 各種百度,找不到自己需要的答案。

 想過一個方法是(尚未驗證):

通過jni的方法將kernel 的發送keyevent的方法用NDK封裝成方法,做成庫給java調用,從而繞過Android WindowsManagerService 的驗證,這是我初期想到的解決思路,但尚未驗證。

另外一個通過驗證的方法為:

將你的服務的userId改成系統層級的,在manifest加如下代碼:

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"  package="com.xuzhitech.remote.server"  android:versionCode="1"  android:versionName="1.0"  android:sharedUserId="android.uid.system" >

 加上這一代碼,需要在源碼裡面編譯才會生效,添加Android.mk檔案:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := optionalLOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := RemoteAndroidServerLOCAL_CERTIFICATE := platform#LOCAL_CERTIFICATE := shareLOCAL_OVERRIDES_PACKAGES := Homeinclude $(BUILD_PACKAGE) 

這裡的 LOCAL_CERTIFICATE 要使用platform編譯,而不是share編譯。

到了這裡,你就可以跨進程類比按鍵了。

感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.