国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android 跨進程模擬按鍵(KeyEvent )實例詳解

2019-12-12 04:39:00
字體:
來源:轉載
供稿:網(wǎng)友

  Android 解決不同進程發(fā)送KeyEvent 的問題

最近在做有關于Remote Controller 的功能,該功能把手機做成TV的遙控器來處理。在手機的客戶端發(fā)送消息到TV的android 服務端,服務端接收到客戶端的請求消息,模擬KeyEvent命令,發(fā)送Key值。

 最簡單的發(fā)送命令為如下代碼:

 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();  }

這種方法在當前的界面和相同的進程上是沒有問題的,可以實現(xiàn)的基本的需求。但當我還是把服務開啟著,按HOME將服務或者界面退出到后臺時,再通過客戶端向服務端服務發(fā)送消息使其模擬按鍵時,不幸的事情發(fā)送了:

Injecting to another application requires INJECT_EVENTS permission

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

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

網(wǎng)上各種google 各種百度,找不到自己需要的答案。

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

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

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

將你的服務的userId改成系統(tǒng)級別的,在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編譯。

到了這里,你就可以跨進程模擬按鍵了。

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 新野县| 常熟市| 牙克石市| 博野县| 华安县| 克什克腾旗| 廉江市| 江城| 沙河市| 抚州市| 准格尔旗| 即墨市| 无锡市| 武乡县| 尖扎县| 平邑县| 巴林左旗| 广灵县| 招远市| 通渭县| 砀山县| 榆社县| 桦南县| 什邡市| 沁水县| 松桃| 石屏县| 宁晋县| 夹江县| 赤壁市| 来凤县| 达日县| 浮梁县| 于田县| 阳高县| 岐山县| 衡南县| 荔波县| 盐津县| 上栗县| 瑞金市|