【发布时间】:2017-02-26 18:08:27
【问题描述】:
我正在为 Android Studio 的虚拟鼠标光标编程,这是来自 website 及其 code 中的一个示例。我有一个覆盖光标和以下代码可以返回主屏幕。
Intent newActivity = new Intent(Intent.ACTION_MAIN);
newActivity.addCategory(Intent.CATEGORY_HOME);
newActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(newActivity);
我的问题是当视图在我的应用程序之外(可能是主屏幕或其他应用程序)时,如何将点击操作应用于我的光标。我试过这个
Instrumentation m_Instrumentation = new Instrumentation();
m_Instrumentation.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,new_x, new_y, 0));
m_Instrumentation.sendPointerSync(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, new_x, new_y, 0));
但它显示了
注入到另一个应用程序需要 INJECT_EVENTS 权限。
然后,我添加了
<uses-permission android:name="android.permission.INJECT_EVENTS"/> 在 AndroidManifest.xml 中。有一个名为“权限仅授予系统应用程序”的错误,因此我无法在我的应用程序中使用它来执行虚拟点击。如果我只是关闭检查系统,它仍然不适用于我的应用程序。
之后,我用 Handler 尝试了 dispatchTouchEvent,但它只适用于我自己的应用程序(不能在主屏幕上使用来打开其他应用程序。)
dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis() + 100, MotionEvent.ACTION_DOWN, new_x, new_y, 0));
dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis() + 100, MotionEvent.ACTION_UP, new_x, new_y, 0));
感谢您的回复。
我的模拟移动设备是 Android 4.4.2。
编译SDK版本:Android 6.0
构建工具版本:24.0.3
【问题讨论】:
标签: android inject mouse-cursor