【问题标题】:Inject fake sensor events to Android framework将假传感器事件注入 Android 框架
【发布时间】:2015-02-08 16:16:10
【问题描述】:

我想知道是否有办法将传感器事件直接注入 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)

由此,我可以知道 Sensor 事件是由 MessageQueue 和 Looper 处理的。

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

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

我的问题是:

  1. 我应该将什么消息放入 MessageQueue 以生成虚假传感器事件?以及如何?

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

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

提前致谢!!

【问题讨论】:

标签: android frameworks sensors platform


【解决方案1】:

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

例如,您可以将实际的传感器事件存储在具有以下详细信息的文件中:

"传感器类型、传感器延迟、X 数据、Y 数据、Z 数据".

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

此外,如果您可以停止 HAL 中的实际事件并将假事件传递给框架,它也应该可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2020-09-04
    • 2017-06-10
    • 1970-01-01
    相关资源
    最近更新 更多