[英]Accessibility app for android that runs on top of all other applications and can intervene and send touch/tap events to views of other apps
[英]Android app that runs on top of ALL other apps?
在今天之前我会说这是不可能的,让一个应用程序覆盖在其他一切之上:主屏幕,应用程序,拨号器等。
如果您尝试免费应用程序“超级经理”,它就是这样做的。 它有一个图标和小部件像屏幕,将始终和任何地方显示。 当图标或小部件在屏幕上时,您仍然可以与在其后面运行的应用程序进行交互。
这怎么可能,我们如何重新创建这个功能?
更新:这是一些实际的图像。 您可以看到叠加的应用程序作为Dolphin顶部的小箭头运行。 然后当你按它时,你可以看到应用程序作为一个大小部件运行。 即使在窗口小部件启动时,您仍然可以与后台应用程序进行交互。 在此示例中,dolphin是后台应用程序。
从Android 4.x开始,Android团队Android团队通过添加新函数adjustWindowParamsLw()修复了潜在的安全问题,其中它将为TYPE_SYSTEM_OVERLAY窗口添加FLAG_NOT_FOCUSABLE,FLAG_NOT_TOUCHABLE和删除FLAG_WATCH_OUTSIDE_TOUCH标志。
那个TYPE_SYSTEM_OVERLAY窗口不会在ICS平台上收到任何触摸事件,当然,使用TYPE_SYSTEM_OVERLAY在ICS或未来的设备上是不可行的。
更新:2016/5/4 TYPE_TOAST无法在Android 4.0~4.3上接收触摸事件。 它与TYPE_SYSTEM_OVERLAY相同。 在Android 4.4及更高版本中,TYPE_TOAST已从排除列表中删除,因此您还可以使用TYPE_TOAST在Android 4.4+设备上接收触摸事件。
这可以通过组合来完成。 初始按钮是通过创建TYPE_SYSTEM_OVERLAY类型的窗口完成的。 这些窗口无法获得焦点,但是您可以使用FLAG_WATCH_OUTSIDE_TOUCH来获取触摸事件并匹配坐标以实现您已被触摸。
类似地,有http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_SYSTEM_ALERT (和TYPE_SYSTEM_DIALOG)。
最后,可以使用http://developer.android.com/reference/android/R.style.html#Theme_Translucent (或变体)创建活动。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.