问题介绍
前言:Remote Controller中手机通过蓝牙连接手柄,接受手柄发送的各种
数据消息,最终模拟出android标准的系统事件,即KeyEvent事件
简单的实现代码如下:
public static void simulateKeyEvent(final int KeyCode) {
new Thread(new Runnable() {
public void run() {
// 开线程调用方法
try {
Instrumentation inst=new Instrumentation();
inst.sendKeyDownUpSync(KeyCode);
} catch (Exception e) {
// 异常catch
}
}
}).start();
}
注:keyCode查看KeyEvent.java中的各种系统事件
系统事件的详细介绍
上面介绍的简单方法以Service的形式开启,在单个进程和单个应用中使用是没有问题的,但是当按Home键或者其他方式退出当前应用之后,虽然service还在,但是上述的方法无法执行:Injecting to another application requires INJECT_EVENTS permission,
提示没有权限,但是在AndroidManifest.xml中加上权限之后,仍然无法解决问题。
解决方法
解决该问题的关键是为当前应用的id变成系统级别的,可以理解成获取系统权限,解决方法围绕这点展开
- 在应用程序的AndroidManifest.xml中的manifest节点中加入
android:sharedUserId=”android.uid.system”这个属性。 - 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行
- 源码下使用mm命令来编译