权限-悬浮窗

申明:低级码农问题解决中的参考和解决后的小结,仅用于个人记录,能力有限,可能有些错误,缺陷不自知,欢迎在评论中指正,谢谢!

  • 需要申请悬浮窗权限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  • 判断悬浮窗权限的方法(8.0以上,有的机型不需要判断,比如我的Meizu X8):
android.provider.Settings.canDrawOverlays(Context)
  • 使用WindowManager显示悬浮窗

注意,8.0以上,必须使用 TYPE_APPLICATION_OVERLAY

                // 找到布局文件
                View popup = LayoutInflater.from(getApplicationContext()).inflate(R.layout.popup, null);
                WindowManager mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
                // WindowManager.LayoutParams的参数
                WindowManager.LayoutParams mViewParams = new WindowManager.LayoutParams();
                mViewParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
                mViewParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
                mViewParams.gravity = Gravity.CENTER;
                DisplayMetrics dm = new DisplayMetrics();
                mWindowManager.getDefaultDisplay().getMetrics(dm);
                mViewParams.x = -(int) dm.widthPixels / 2;
                mViewParams.y = -(int) dm.heightPixels / 2;
                // 8.0系统加强后台管理,禁止在其他应用和窗口弹提醒弹窗,如果要弹,必须使用TYPE_APPLICATION_OVERLAY
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    mViewParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
                } else {
                    mViewParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
                }
                mViewParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                        | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
                        | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                        | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
                mViewParams.format = PixelFormat.RGBA_8888;
                mViewParams.alpha = 0.5f;
                mWindowManager.addView(popup, mViewParams);


原文地址:https://www.cnblogs.com/hellodingc/p/12623122.html

时间: 2024-10-19 04:30:01

权限-悬浮窗的相关文章

Android无需权限显示悬浮窗, 兼谈逆向分析app

最近UC浏览器中文版出了一个快速搜索的功能, 在使用其他app的时候, 如果复制了一些内容, 屏幕顶部会弹一个窗口, 提示一些操作, 点击后跳转到UC, 显示这个悬浮窗不需要申请android.permission.SYSTEM_ALERT_WINDOW权限. 如下图, 截图是在使用Chrome时截的, 但是屏幕顶部却有UC的view浮在屏幕上. 我使用的是小米, 我并没有给UC授悬浮窗权限, 所以我看到这个悬浮窗时是很震惊的. 截图 悬浮窗原理 做过悬浮窗功能的人都知道, 要想显示悬浮窗, 要

【图文教程】小米4如何获取触动精灵悬浮窗权限

机型:小米4 系统:4.4.4 1. 打开设置,在界面底部找到其他应用管理,点击 2. 在打开的界面找到触动精灵并点击 3. 在应用详情界面上滑,点击底部的权限管理 4. 点击悬浮窗管理,在弹出的底部菜单选择允许

关于MIUI悬浮窗权限问题的解决方案

先扯会....好久没写Blog了....这段时间有点小忙...瞎忙.....忙的自己都感觉都不应该.....严重影响了生活质量......生活的幸福指数!!!.....到现在还特么的单身!!!求介绍啊...... MIUI是我个人非常喜欢的ROM....虽然有诸多的不爽....但是搞开发就能理解.....写好一个产品是多么的不易.....好多东西的不可控....精力的有限! 现在买手机都看能不能刷MIUI..不能刷的就犹豫了..... ===============盗链....盗内容的都是Erb

Android WindowManager悬浮窗:不需要申请权限实现悬浮

?? Android WindowManager悬浮窗:不需要申请权限实现悬浮 附录文章1介绍了Android平台上的悬浮窗WindowManager,WindowManager悬浮窗可以悬浮在Android设备上的桌面窗口之上,但是WindowManager的使用,必须先申请权限,在一些定制的Android操作系统中,有可能会将WindowManager悬浮窗的权限一律屏蔽掉,这就导致基于WindowManager的APP功能难以实现.然而,可以变通的通过设置WindowManager的类型,

悬浮窗 权限

/** * 判断是有悬浮框权限 * @return */public static boolean canDrawOverlays(Context context) { try { return Settings.canDrawOverlays(context); } catch (NoSuchMethodError e) { }}/** * 判断是否缺少权限 * @param permission * @return */public static boolean checkSelfPermi

突破小米悬浮窗权限控制--不需要权限的悬浮窗

突破小米悬浮窗权限控制–不需要权限的悬浮窗 在上一篇文章讲了Android的Toast拓展,在原生Toast基础上对显示时长和显示动画做了二次封装,强化了Toast的部分功能.也分析了对于二次封装的ExToast设计原理,以及Toast的关键点.如果不了解的可以看看下面的链接. Toast拓展–自定义显示时间和动画 常用悬浮窗与Toast 之前分析过,Toast其实就是系统悬浮窗的一种,那它跟常用的系统悬浮窗有什么区别呢? 先看一下常用的Andoird系统悬浮窗写法: // 获取应用的Conte

Android 悬浮窗权限校验

原文:Android 悬浮窗权限校验 悬浮窗权限: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 权限检验和请求: //检查是否已经授予权限,大于6.0的系统适用,小于6.0系统默认打开,无需理会 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M&&!Settings.canDrawOverlays(

Android 悬浮窗

iPhone有个很好用的白色圆点,今天就来研究下Android中的悬浮框,这里主要是实现一个快捷键的功能,当然也可以在悬浮框中做想做的事! 悬浮窗的实现主要是通过WindowManager实现,当然WindowManager只是一个接口,想了解源码的同志们可以去看WindowManagerImpl,悬浮框主要是通过WindowManager中的addView,updateView,removeView实现 WindowManager.LayoutParams这个类用于提供悬浮窗所需的参数 Win

(转载)简易的可拖动的桌面悬浮窗效果

本文转载自:http://www.cnblogs.com/xqxacm/p/4918470.html 首先,我们需要知道,悬浮窗分为两种:Activity级别的悬浮窗,系统级别的悬浮窗 Activity级别的悬浮窗跟随所属Activity的生命周期而变化,而系统级别的悬浮窗则可以脱离Activity而存在. 由此可知,要实现360手机卫士那样的悬浮窗效果,就需要使用系统级别的悬浮窗 下面学习实现桌面悬浮窗效果的代码步骤: 1.配置清单文件AndroidManifest.xml 中 添加系统悬浮窗