【问题标题】:But it still error application requires INJECT_EVENTS permission但它仍然错误应用程序需要 INJECT_EVENTS 权限
【发布时间】:2015-06-15 09:19:39
【问题描述】:

我关注:Android INJECT_EVENTS permissionPermission: INJECT_EVENTS for Instrumenation to other apps

1.我的手机root成功了。

2.我已经关注sign application APK并将app.apk复制到system/app,并通过app root explorer将权限app.apk设置为rw-r--r--

3.我在Androidmanifest.xml中添加<uses-permission android:name="android.permission.INJECT_EVENTS" />

但它仍然错误需要注入许可。不知道为什么?

    06-06 21:23:31.815: E/OpenCV::camera(21812): calling (*pGetPropertyC)(0x7bde06c8, 3)
06-06 21:23:32.058: E/AndroidRuntime(21812): FATAL EXCEPTION: Thread-1881
06-06 21:23:32.058: E/AndroidRuntime(21812): Process: com.example.handtracking, PID: 21812
06-06 21:23:32.058: E/AndroidRuntime(21812): java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission
06-06 21:23:32.058: E/AndroidRuntime(21812):    at android.os.Parcel.readException(Parcel.java:1472)
06-06 21:23:32.058: E/AndroidRuntime(21812):    at android.os.Parcel.readException(Parcel.java:1426)
06-06 21:23:32.058: E/AndroidRuntime(21812):    at android.hardware.input.IInputManager$Stub$Proxy.injectInputEvent(IInputManager.java:356)
06-06 21:23:32.058: E/AndroidRuntime(21812):    at android.hardware.input.InputManager.injectInputEvent(InputManager.java:642)
06-06 21:23:32.058: E/AndroidRuntime(21812):    at android.app.Instrumentation.sendPointerSync(Instrumentation.java:937)
06-06 21:23:32.058: E/AndroidRuntime(21812):    at com.example.handtracking.CameraService$CameraWorker$2.run(CameraService.java:293)
06-06 21:23:32.274: E/Surface(240): queueBuffer: error queuing buffer to SurfaceTexture, -32
06-06 21:23:32.276: E/MtkCam/DisplayClient(240): (22102)[enquePrvOps] mpStreamOps->enqueue_buffer failed: status[Broken pipe(32)], rpImgBuf(0xb7381fb8,0xaeeb1000) (enquePrvOps){#369:mediatek/hardware/mtkcam/v1/client/DisplayClient/DisplayClient.Stream.cpp}
06-06 21:23:32.406: E/Sensors(785): handleToDriver handle(0)
06-06 21:23:32.406: E/Sensors(785): handleToDriver handle(0)
06-06 21:23:32.409: E/Sensors(785): new setDelay handle(0),ns(1000000)m, error(0), index(1)
06-06 21:23:32.409: E/Accel(785): ACC batch: handle:0, en:0, maxBatchReportLatencyNs:0 
06-06 21:23:32.409: E/Sensors(785): sensor 0 go to common batch
06-06 21:23:32.480: E/Sensors(785): handleToDriver handle(0)
06-06 21:23:32.480: E/Sensors(785): handleToDriver handle(0)
06-06 21:23:32.483: E/Sensors(785): new setDelay handle(0),ns(1000000)m, error(0), index(1)
06-06 21:23:32.483: E/Accel(785): ACC batch: handle:0, en:0, maxBatchReportLatencyNs:0 
06-06 21:23:32.483: E/Sensors(785): sensor 0 go to common batch
06-06 21:23:32.743: E/PROXIMITY(785): ProximitySensor: unknown event (type=3, code=0)
06-06 21:23:32.843: E/PROXIMITY(785): ProximitySensor: unknown event (type=3, code=0)
06-06 21:23:33.543: E/PROXIMITY(785): ProximitySensor: unknown event (type=3, code=0)

代码注入事件

thread_touch = new Thread(){
                       @Override
                       public void run(){
                               Instrumentation m_Instrumentation = new Instrumentation();

                               m_Instrumentation.sendPointerSync(MotionEvent.obtain(
                                       SystemClock.uptimeMillis(),
                                       SystemClock.uptimeMillis(),
                                       MotionEvent.ACTION_DOWN,x, y, 0));
                               m_Instrumentation.sendPointerSync(MotionEvent.obtain(
                                       SystemClock.uptimeMillis(),
                                       SystemClock.uptimeMillis(),
                                       MotionEvent.ACTION_UP,x,y, 0));
                       }
                   };
                   thread_touch.start();

我的手机是联想P70 android 4.4.4

【问题讨论】:

    标签: android permissions


    【解决方案1】:

    此权限授予系统应用程序。 3rd 方不能拥有它。除非您使用系统证书签署您的应用程序,否则您将不会被授予INJECT_EVENTS 权限。

    Docs here read:

    允许应用程序注入用户事件(按键、触摸、轨迹球) 进入事件流并将它们传递到任何窗口。没有这个 权限,您只能将事件传递到您自己的窗口 过程。

    不得用于第三方应用程序

    【讨论】:

    • 如何使用系统证书签署我的应用程序?能给个链接吗?
    • 和任何其他的一样。但是你必须先有系统证书,这不是公开的事情。
    • 如何在我的应用中拥有系统证书?
    • 这也是我想知道的,CyanogenMod 源是否提供了系统证书文件,还是落后于原始开发者?
    • 除非您自己构建整个系统映像,否则您不能拥有系统证书,这意味着您需要创建自己的证书才能成为系统一。 .
    猜你喜欢
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2011-07-19
    相关资源
    最近更新 更多