开发者

Android app that runs on top of ALL other apps?

开发者 https://www.devze.com 2023-02-05 12:33 出处:网络
Before today I would have said this is just not possible, to have an app that runs overlayed on top of everything else: home sc开发者_JAVA百科reens, apps, dialer, etc.

Before today I would have said this is just not possible, to have an app that runs overlayed on top of everything else: home sc开发者_JAVA百科reens, apps, dialer, etc.

If you try the free application "Super Manager" it does exactly this. It has an icon and widget like screen that will show up always and everywhere. While the icon or widget is on the screen you can still interact with the app running behind it.

How is this possible and how can we recreate this functionality?

Update: Here is some images of it in action. You can see the overlayed application running as a small arrow on top of Dolphin. Then when you press it you can see the application running as a big widget kind of thing. Even while the widget is up you can still interact with the background app. In this example dolphin is the background app.

Android app that runs on top of ALL other apps?

Android app that runs on top of ALL other apps?


See this:

Creating a system overlay window (always on top)

Check the comment section of the accepted answer. You will find link to a working example project.

==EDIT==

Link to the project


Starting from Android 4.x, Android team Android team fixed a potential security problem by adding a new function adjustWindowParamsLw() in which it will add FLAG_NOT_FOCUSABLE, FLAG_NOT_TOUCHABLE and remove FLAG_WATCH_OUTSIDE_TOUCH flags for TYPE_SYSTEM_OVERLAY window.

That's TYPE_SYSTEM_OVERLAY window won't receive any touch event on ICS platform and, of course, to use TYPE_SYSTEM_OVERLAY is not workable on ICS or future devices.

Updated: 2016/5/4 TYPE_TOAST cannot receive touch events on Android 4.0~4.3. It's the same as TYPE_SYSTEM_OVERLAY. On Android 4.4+, TYPE_TOAST removed from the excluded list, so you can also use TYPE_TOAST to receive touch events on Android 4.4+ devices.


This can be done by a combination of things. The initial button is done by creating a window of type TYPE_SYSTEM_OVERLAY . These windows cannot gain focus, however you can use FLAG_WATCH_OUTSIDE_TOUCH to get touch events and match up the coordinates to realized you've been touched.

Similarly there is http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_SYSTEM_ALERT (And TYPE_SYSTEM_DIALOG).

Finally, an activity can be created with http://developer.android.com/reference/android/R.style.html#Theme_Translucent (or variants).

0

精彩评论

暂无评论...
验证码 换一张
取 消