Android系统应用无权打开/ dev / input

时间:2015-02-03 13:37:44

标签: android android-ndk

我有一个系统应用程序(使用平台密钥签名),这个应用程序正在注入事件。它正在使用uinput并尝试使用/dev/input/eventN(其中N是一个数字)。

如果我以root身份运行代码(即使用su),代码显然可以打开/dev/input/eventN并可以在那里注入事件。如果代码是从系统应用运行的,那么在使用permission denied打开/dev/input/eventN时,我会获得open("/dev/input/event1", O_RDWR)。然而,即使在系统应用程序中,Uinput工作正常。

系统应用程序请求的权限是:

<uses-permission android:name="android.permission.READ_FRAME_BUFFER"
                 tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER"
                 tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.INJECT_EVENTS"
                 tools:ignore="ProtectedPermissions"/>
<uses-permission android:name="android.permission.BIND_INPUT_METHOD"
                 tools:ignore="ProtectedPermissions"/>

对于它的价值,这个系统应用程序也会读取屏幕,并且能够这样做。所以很奇怪它无法用r / w /dev/input/eventN打开。

如果可行的话,您可能想知道uinput有什么问题。 uinput的问题在于我在注入触摸事件时遇到问题。具体来说,我不能点击&#34; (TAP)。我可以拖动,滑动,注入键盘事件,但点击(点击)只是不起作用。看起来似乎长时间停滞不前。它没有注册最终事件,其中ABS_MT_TRACKING_ID设置为0xffffffff

我用于&#34;点击&#34;的代码(点击)是:

// pointer down
send_event(EV_ABS, ABS_MT_SLOT, 0);
send_event(EV_ABS, ABS_MT_TRACKING_ID, m_tracking_id++ % 65535);
send_event(EV_ABS, ABS_MT_TOOL_TYPE, MT_TOOL_PEN);

// pointer coordinates
send_event(EV_ABS, ABS_MT_POSITION_X, x);
send_event(EV_ABS, ABS_MT_POSITION_Y, y);
send_event(EV_ABS, ABS_MT_TOUCH_MAJOR, m_tracking_id % 2 ? 0x3c : 0x30);
send_event(EV_ABS, ABS_MT_PRESSURE, m_tracking_id % 2 ? 20 : 25);
send_event(EV_SYN, SYN_REPORT);

// pointer up
send_event(EV_ABS, ABS_MT_TRACKING_ID, -1);
send_event(EV_SYN, SYN_REPORT);

0 个答案:

没有答案