如何在没有root权限的情况下以编程方式获取其他应用程序的屏幕截图,例如Screenshot UX Trial?
我知道我可以在我的应用程序中捕获根视图的位图.但是当我的应用程序在后台运行时,我无法获得其他应用程序的根视图
bitmap = Bitmap.createBitmap(rootview.getDrawingCache());
在Manifest中有权捕获当前帧缓冲区:android.permission.READ_FRAME_BUFFER.但是一些网站说它只适用于签名应用.
在尝试使用屏幕截图UX试用版后,我阅读了权限:
它似乎SYSTEM_ALERT_WINDOW或GET_TASKS允许应用程序截取屏幕截图.我有两个猜测它是如何工作的:
Activity前景活动,它获取其根视图Activity,捕获其截图.glreadpixels如果您尝试我的猜测,请告诉我结果.
遥想几年前,我问的TeamViewer如何允许用户控制设备,而无需与设备正常交互.我被告知这是一个特殊的"后门",制造商专门为这个应用程序提供,并且只能使用root权限用于其他应用程序.
看到像"飞行模式快捷方式"这样的应用程序允许切换飞行模式,通过自动导航到其屏幕并切换开关,它让我意识到这种情况已经改变.
在文档中说:
从Android 4.0(API级别14)开始,辅助功能服务可以代表用户执行操作,包括更改输入焦点和选择(激活)用户界面元素.在Android 4.1(API级别16)中,操作范围已扩展为包括滚动列表和与文本字段交互.辅助功能服务还可以执行全局操作,例如导航到主屏幕,按"返回"按钮,打开通知屏幕和最近的应用程序列表.Android 4.1还包括一种新型焦点Accessibilty Focus,它使所有可见元素都可由辅助功能服务选择.
这些新功能使辅助功能服务的开发人员可以创建替代导航模式,如手势导航,并为残障用户提供对其Android设备的更好控制.
但是没有关于如何使用它的更多信息.只有我发现的样本位于底部,但这些样本非常陈旧,是apiDemos包的一部分.
如何创建可以查询,聚焦,单击,输入文本以及执行其他UI相关操作的服务?
在monkeyRunner(和猴)是一个很好的工具来测试应用程序.
我有一个使用它(或类似的东西)来记录和模拟触摸(和键)的想法.
该工具本身有一些缺点:
需要在仿真器或连接到PC的设备上运行.
需要adb.
它需要你准确地输入它做什么,这需要很多耐心和试验和错误才能找到要写的东西.
对运行的设备数量有限制(因为它需要连接到PC).
需要定制每个设备(例如,在哪里进行触摸).
不直观,特别是对于QA团队.
即使不使用计算机,是否可以使用此工具记录触摸(和键)并稍后模拟它们?也许使用root设备?
拥有这种能力有一些好处:
它可以帮助您在旅途中运行测试,并帮助QA团队以更简单的方式进行测试.您可以使用一个工具来帮助您记录将在每个新版本上运行的测试的宏,以及一些有点随机的测试,......
它可以帮助为高级用户制作很酷的应用程序,例如为了帮助其他人,远程控制,宏,......
由于您不必将设备连接到计算机,因此您可以同时在多个设备上的应用程序上运行宏.
如何在运行后台服务的应用程序外部从Java可靠地模拟Android上的触摸事件(无需生根)?
尽管以前已经问过这个问题,但是大多数答案都是使用ADB的。(例如如何在Android设备上模拟触摸事件?)
https://github.com/chetbox/android-mouse-cursor使用Accessibility提供了一个很好的解决方案,但是它不是很可靠,因为不是所有视图都响应它,并且游戏在大多数时间都没有响应。
private void click() {
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();
}
Run Code Online (Sandbox Code Playgroud)
Android版本是8.0,库存Android
有没有更好,更可靠的方法来模拟Java中的这些触摸事件?提前致谢!