将假传感器事件注入Android框架

时间:2014-12-10 12:52:46

标签: android frameworks sensor platform

我想知道是否有办法将传感器事件直接注入Android框架。 所以我首先通过OnSensorChanged中的Thread.dumpstack()检查传感器事件流。 (SensorActivity是我为测试所做的一项活动)

java.lang.Throwable: stack dump at java.lang.Thread.dumpStack(Thread.java:489)
 at com.test.sensor.SensorActivity.onSensorChanged(SensorActivity.java:64)
 at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:469)
 at android.os.MessageQueue.nativePollOnce(Native Method)
 at android.os.MessageQueue.next(MessageQueue.java:138)
 at android.os.Looper.loop(Looper.java:123)
 at android.app.ActivityThread.main(ActivityThread.java:5001)
 at java.lang.reflect.Method.invokeNative(Native Method)
 at java.lang.reflect.Method.invoke(Method.java:515)
 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)

据此,我可以知道传感器事件由MessageQueue和Looper处理。

所以我想如果我可以将假传感器事件消息排入MessageQueue,Android框架将像往常一样处理传感器事件。

但是,我不知道传感器事件消息的外观以及如何排队。

我的问题是这些:

  1. 我应该在MessageQueue中添加什么消息来生成虚假的传感器事件?以及如何?

  2. 有没有其他方法可以注入假传感器事件?

  3. 我正在修改Android框架层(4.4.4)中的源代码,而不是在App层中。

    提前致谢!!

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

为了将假事件注入Android框架,应该对传感器HAL进行更改,其中应该停止来自内核端的事件。 此外,假事件应通过HAL发送到框架。 这将要求您创建API以与HAL和注入框架连接。

例如,您可以将实际的传感器事件存储在一个文件中,其中包含以下详细信息:

" 传感器类型,传感器延迟,X数据,Y数据,Z数据"。

然后创建一个SensorService模式,在注入模式下启用,来自内核的事件将被停止。在这里,您将使用传感器中先前保存的事件进行解析,这些事件将被注入传感器HAL传递给框架。

此外,如果您可以停止来自HAL的实际事件并将假事件传递给框架,它也应该也一样。