2014-12-10 3 views
0

Android 프레임 워크에 직접 센서 이벤트를 삽입하는 방법이 있는지 알고 싶습니다. 그래서 먼저 OnSensorChanged의 Thread.dumpstack()에 의한 센서 이벤트 흐름을 검사했습니다. 내가 센서 이벤트가 MessageQueue가 및 루퍼에 의해 처리됩니다 알 수이에서Android 프레임 워크에 가짜 센서 이벤트 삽입

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) 

(SensorActivity 내가 테스트를 위해 만든 활동).

그래서 가짜 센서 이벤트 메시지를 MessageQueue에 넣을 수 있다면 Android 프레임 워크가 센서 이벤트를 평소대로 처리 할 것이라고 생각했습니다.

그러나 센서 이벤트 메시지가 어떻게 보이고 어떻게 대기열에 추가되는지 알지 못합니다.

내 질문이 있습니다 : 내가 가짜 센서 이벤트를 생성 MessageQueue가 투입되어야 어떤 메시지

  1. ? 그리고 어떻게?

  2. 가짜 센서 이벤트를 주입하는 다른 방법이 있습니까?

저는 응용 프로그램 계층이 아니라 Android 프레임 워크 계층 (4.4.4)의 소스 코드를 수정하고 있습니다.

미리 감사드립니다.

+0

시도 [android event injector] (https://code.google.com/p/android-event-injector/)? – Gattsu

+0

@maven 나는 그것을 읽었고, 내가 알다시피, 그것은 터치 이벤트에만 해당된다. – ljhokgo

답변

0

을 조사해야한다고 생각, 변경 사항이 커널 측면에서 오는 이벤트가 중지해야 HAL을 센서에해야한다. 가짜 이벤트는 HAL을 통해 프레임 워크로 보내야합니다. 이렇게하면 HAL과 주입 용 프레임 워크와의 인터페이스를위한 API를 만들어야합니다.

예를 들어, 다음과 같은 세부 정보가 파일의 실제 센서 이벤트를 저장할 수 있습니다 :

"센서의 유형, 센서 지연, X 데이터, Y 데이터, Z 데이터를".

그런 다음 주입 모드에서 활성화 할 SensorService 모드를 생성합니다. 여기서 주입 모드에서 커널의 이벤트가 중지됩니다. 이전에 저장 한 센서의 이벤트를 사용하여 센서에 주입 할 때 구문 분석 할 때 사용합니다 HAL은 프레임 워크로 전달됩니다.

또한 실제 이벤트를 HAL에서 중단하고 가짜 이벤트를 프레임 워크로 전달할 수있는 경우에도 동일하게 작동해야합니다.