我正在为Android工作室编写虚拟鼠标光标,这是来自此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权限。
然后,我补充道
AndroidManifest.xml中的<uses-permission android:name="android.permission.INJECT_EVENTS"/>
。有一个错误称为“权限仅授予系统应用程序”,因此我无法在我的应用程序中使用它来执行虚拟点击。如果我只是关闭检查系统,它仍然无法用于我的应用程序。
之后,我尝试使用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
答案 0 :(得分:0)
你做不到。出于安全原因,您不被允许 - 他们不希望一个应用程序出于安全目的向另一个应用程序发送命令。仪器设备用于单元测试,它只能用于测试套件是同一个应用程序的一部分。
答案 1 :(得分:0)
您可能会发现此链接很有用:)
https://github.com/chetbox/android-mouse-cursor
没有生根,他设法使用这些行发送点击次数
private void click() {
Log.d(TAG, String.format("Click [%d, %d]", cursorLayout.x, cursorLayout.y));
AccessibilityNodeInfo nodeInfo = getRootInActiveWindow();
if (nodeInfo == null) return;
AccessibilityNodeInfo nearestNodeToMouse = findSmallestNodeAtPoint(nodeInfo, cursorLayout.x, cursorLayout.y + 50);
if (nearestNodeToMouse != null) {
logNodeHierachy(nearestNodeToMouse, 0);
nearestNodeToMouse.performAction(AccessibilityNodeInfo.ACTION_CLICK);
}
nodeInfo.recycle();
}