`
webcenterol
  • 浏览: 978138 次
文章分类
社区版块
存档分类
最新评论

Android: Service中创建窗口显示(TYPE_SYSTEM_ALERT, TYPE_SYSTEM_OVERLAY)

 
阅读更多

有时候需要在显示UI的时候不中断原来的Activity

比如在播放视频时或者玩游戏时,需要显示某个菜单(可以是系统提示,或类似于TV菜单)

显然用Activity来做是不行的,因为新Activity启动的时候会把原来的Activity pause掉

怎么做呢,可以参考系统电量提示窗口或statusbar那样在service中启动窗口

新窗口将会出现在UI最上层,但不会中断原来的Activity

效果图,一个是播视频中,一个是玩游戏中:


看一下WindowManager.LayoutParams的两个属性:

int TYPE_SYSTEM_ALERT Window type: system window, such as low power alert.
int TYPE_SYSTEM_OVERLAYWindow type: system overlay windows, which need to be displayed on top of everything else.

这两个不错,正是我们想要的,上代码~


Seivece中代码


创建了一个dialog,可以调整dialog的位置、大小,dialog的从R.layout.main创建,动态添加UI数据

响应Ui上的OnClick操作


* manifest中需要相应的permission

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />

*TYPE_SYSTEM_ALERT跟TYPE_SYSTEM_OVERLAY的区别

以上面的代码为例,system_alert窗口可以获得焦点,响应操作

system_overlay窗口显示的时候焦点在后面的Activity上,仍旧可以操作后面的Activity

* 上面的代码中请留意d.show()的位置,只有在show之后才能调整dialog大小及更新数据

* 可以调整的Attributes,先dump出来

lp.flags = 0x20002, //FLAG_DIM_BEHIND | FLAG_ALT_FOCUSABLE_IM

lp.gravity = 0x11, // CENTER

lp.type= 0x7d3, //TYPE_SYSTEM_ALERT

这些Attr都可以设置,具体定义在API文档WindowManager.LayoutParams中








分享到:
评论
1 楼 lwangivy 2012-07-26  
代码里的那个d就是什么类型?

相关推荐

    详解Android 全局弹出对话框SYSTEM_ALERT_WINDOW权限

    这个权限允许应用在其他应用之上显示窗口,包括在主屏幕或其他应用界面之上弹出对话框。 首先,要在AndroidManifest.xml文件中声明`SYSTEM_ALERT_WINDOW`权限,如下所示: ```xml &lt;uses-permission android:name=...

    android实现悬浮窗功能,无需权限

    此外,对于Android 8.0及以上版本,由于系统的限制,长时间显示`TYPE_TOAST`类型的窗口可能会被系统自动关闭,因此在实际应用中可能需要考虑其他类型的窗口,例如`TYPE_PHONE`或`TYPE_APPLICATION_OVERLAY`,但这...

    android 浮动窗口 小窗口

    这个`SYSTEM_ALERT_WINDOW`权限使得我们的应用可以在所有其他应用之上显示窗口。 接下来,我们创建一个`Service`来承载浮动窗口。在服务中,我们定义一个布局文件,它将作为浮动窗口的内容。以下是一个简单的布局...

    android悬浮控件例子

    在Android开发中,悬浮控件通常被称为悬浮窗或者系统悬浮窗,它可以在应用程序的顶层显示,允许用户在多个应用之间进行交互。这类控件在一些需要实时监控或快速操作的应用中非常常见,如音乐播放器的控制面板、游戏...

    adTest1_brotherddr_浮动窗口_android_

    这个“adTest1_brotherddr_浮动窗口_android_”项目可能是一个示例或者教程,旨在教你如何在Android应用中创建并管理这样的浮动窗口。下面我们将深入探讨浮动窗口的相关知识点。 首先,要实现浮动窗口,我们需要...

    android 悬浮窗

    在Android系统中,悬浮窗(通常被称为Floating Window或者Overlay)是一种可以覆盖在其他应用之上的UI元素,允许用户在执行其他任务的同时查看或操作这些窗口。这种功能在很多应用中都有所体现,如音乐播放器的歌词...

    安卓开发实现悬浮窗显示(全局显示),通过悬浮窗实时监控当前流量

    自Android 3.0(API级别11)起,系统引入了`TYPE_PHONE`和`TYPE_SYSTEM_ALERT`类型的窗口,允许开发者创建在所有应用之上显示的浮动窗口。然而,为了实现全局显示,我们需要使用`SYSTEM_ALERT_WINDOW`权限,这需要在...

    Android代码-悬浮窗权限兼容库

    特殊权限(Special Permissions)兼容库,悬浮窗权限(SYSTEM_ALERT_WINDOW)与系统设置修改权限(WRITE_SETTINGS) Android 6.0以前只要在manifest中申请了权限就是默认开启的 Android 6.0 需要在manifest中申请并且通过...

    android最前端浮动窗口

    在Android系统中,"最前端浮动窗口"通常指的是悬浮窗(Floating Window)或者叫系统顶层窗口,这种技术常被用于实现各种创新的功能,比如音乐播放器的歌词显示、游戏外挂监控、即时通讯应用的聊天窗口等。...

    android悬浮窗口的实现

    在Android系统中,悬浮窗口(通常称为悬浮小部件或悬浮应用)是一种可以在用户界面上方显示的独立窗口,允许用户在执行其他操作的同时查看或使用该窗口。这种功能常见于各种辅助工具、聊天应用和多媒体播放器等。...

    android中状态栏中显示图标,悬浮框

    本篇文章将深入探讨如何在Android应用中实现这些功能,以及如何处理菜单键事件和设置窗口显示权限。 首先,让我们关注“状态栏图标”。在Android系统中,状态栏图标用于向用户显示应用的实时状态或通知。创建一个...

    Android的Window类

    - **`TYPE_SYSTEM_OVERLAY`**(2006):表示系统覆盖窗口,用于显示悬浮窗等。 - **`TYPE_PRIORITY_PHONE`**(2007):表示优先级电话窗口,用于处理紧急通话。 #### 五、总结 通过本文的介绍,我们了解到了`...

    WindowManager.docx

    - `TYPE_SYSTEM_OVERLAY`和`TYPE_SECURE_SYSTEM_OVERLAY`是覆盖在所有内容之上的系统窗口,但它们对焦点的处理有所不同。 理解并正确使用`WindowManager.LayoutParams`的属性,可以实现各种自定义的窗口效果,如...

    Android浮动窗口demo

    总结来说,"Android浮动窗口demo"提供了一个实现悬浮窗功能的示例,通过创建Service、设置布局、处理权限以及控制显示和关闭,展示了如何在Android应用中实现实时网速显示或其他类似功能的悬浮窗口。这个示例对于...

    悬浮窗口demo

    - 对于Android O(API 26)及以上版本,应使用`TYPE_APPLICATION_OVERLAY`代替`TYPE_SYSTEM_ALERT`。 通过以上步骤,你可以创建一个基本的可拖动的悬浮窗口demo。然而,实际应用中可能还需要考虑更多因素,比如...

    android遮挡系统拨号界面 类似360来电显示的那个绿色 页面

    在Android系统中,"遮挡系统拨号界面"通常指的是创建一个悬浮窗口或者顶级窗口(Top Window),使其能够在用户进行拨号操作时显示在系统拨号界面之上,类似360来电显示那样显示一些自定义信息,比如联系人头像、姓名...

    android窗口式activity

    2. 使用`TYPE_PHONE`或`TYPE_SYSTEM_OVERLAY`:这些窗口类型允许Activity在顶部显示,不会被其他应用遮挡。它们常用于创建通知栏小部件或者快速操作。 二、创建窗口式Activity的步骤 1. 添加权限:在...

    Android利用WindowManager实现悬浮窗

    LayoutParams是一个抽象类,提供了多种类型的LayoutParams,包括TYPE_APPLICATION、TYPE_SYSTEM_OVERLAY、TYPE_PHONE、TYPE_SYSTEM_ALERT等。不同的LayoutParams类型对应不同的窗口类型。 三、悬浮窗实现步骤 1. ...

    android浮动窗口

    在Android 4.2及以上版本,系统引入了SYSTEM_ALERT_WINDOW权限,允许应用在所有其他应用之上显示窗口。在AndroidManifest.xml中,你需要添加以下权限: ```xml &lt;uses-permission android:name="android.permission....

    android 控件悬浮,且透明

    默认情况下,Activity的窗口类型是TYPE_APPLICATION,而要实现悬浮效果,我们需要将其更改为TYPE_PHONE或者TYPE_SYSTEM_ALERT,这样Activity就可以在其他应用之上显示了。 接下来,我们需要在AndroidManifest.xml...

Global site tag (gtag.js) - Google Analytics