在所有其他应用程序之上运行的Android应用程序?

时间:2011-01-17 00:20:09

标签: android

在今天之前,我会说这是不可能的,让一个应用程序覆盖其他所有东西:主屏幕,应用程序,拨号器等。

如果您尝试免费应用程序“超级管理器”,它就是这样做的。它有一个图标和小部件像屏幕,将始终和任何地方显示。当图标或小部件在屏幕上时,您仍然可以与在其后面运行的应用程序进行交互。

这怎么可能,我们如何重新创建这个功能?

更新: 这是一些实际的图像。您可以看到叠加的应用程序作为Dolphin顶部的小箭头运行。然后当你按它时,你可以看到应用程序作为一个大小部件运行。即使在窗口小部件启动时,您仍然可以与后台应用程序进行交互。在这个例子中,dolphin是后台应用程序。

Image 1

alt text

3 个答案:

答案 0 :(得分:6)

见:

Creating a system overlay window (always on top)

检查已接受答案的评论部分。您将找到工作示例项目的链接。

== EDIT ==

Link to the project

答案 1 :(得分:5)

从Android 4.x开始,Android团队Android团队确定了潜力 安全问题通过在其中添加一个新函数adjustWindowParamsLw()来实现 将添加FLAG_NOT_FOCUSABLE,FLAG_NOT_TOUCHABLE并删除TYPE_SYSTEM_OVERLAY窗口的FLAG_WATCH_OUTSIDE_TOUCH标志。

TYPE_SYSTEM_OVERLAY窗口不会在ICS平台上收到任何触摸事件,当然,在ICS或未来的设备上使用TYPE_SYSTEM_OVERLAY是不可行的。

更新时间:2016/5/4 在Android 4.0~4.3上,TYPE_TOAST无法接收触摸事件。它与TYPE_SYSTEM_OVERLAY相同。在Android 4.4及更高版本中,TYPE_TOAST已从排除列表中删除,因此您还可以使用TYPE_TOAST在Android 4.4及其设备上接收触摸事件。

答案 2 :(得分: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(或变体)创建活动。