机型多杂,适配无法完全兼容,不如换种实现方式,性能比悬浮窗好,不需要权限,效果更好:https://blog.csdn.net/m0_38058826/article/details/103993392

悬浮窗插入接口

在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去。 Android的界面绘制,都是通过WindowMananger的服务来实现的。那么,既然要实现一个能够在自身应用以外的界面上的悬浮窗,我们就要利用WindowManager来“做手脚”。

(frameworks/base/core/java/android/view/WindowMananger.java)@SystemService(Context.WINDOW_SERVICE)
public interface WindowManager extends ViewManager {...
}

WindowManager实现了ViewManager接口,可以通过获取WINDOW_SERVICE系统服务得到。而ViewManager接口有addView方法,我们就是通过这个方法将悬浮窗控件加入到屏幕中去。

权限设置及请求

悬浮窗需要在别的应用之上显示控件,很显然,这需要某些权限才可以。 在API Level >= 23的时候,需要在AndroidManefest.xml文件中声明权限SYSTEM_ALERT_WINDOW才能在其他应用上绘制控件。

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

除了这个权限外,我们还需要在系统设置里面对本应用进行设置悬浮窗权限。该权限在应用中需要启动Settings.ACTION_MANAGE_OVERLAY_PERMISSION来让用户手动设置权限。

startActivityForResult(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName())), REQUEST_CODE);

LayoutParam设置

WindowManager的addView方法有两个参数,一个是需要加入的控件对象,另一个参数是WindowManager.LayoutParam对象。

这里需要着重说明的是LayoutParam里的type变量。这个变量是用来指定窗口类型的。在设置这个变量时,需要注意一个坑,那就是需要对不同版本的Android系统进行适配。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {layoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
}

在Android 8.0之前,悬浮窗口设置可以为TYPE_PHONE,这种类型是用于提供用户交互操作的非应用窗口。

而Android 8.0对系统和API行为做了修改,包括使用SYSTEM_ALERT_WINDOW权限的应用无法再使用一下窗口类型来在其他应用和窗口上方显示提醒窗口:

  • TYPE_PHONE

  • TYPE_PRIORITY_PHONE

  • TYPE_SYSTEM_ALERT

  • TYPE_SYSTEM_OVERLAY

  • TYPE_SYSTEM_ERROR

如果需要实现在其他应用和窗口上方显示提醒窗口,那么必须该为TYPE_APPLICATION_OVERLAY的新类型。 如果在Android 8.0以上版本仍然使用TYPE_PHONE类型的悬浮窗口,则会出现如下异常信息:

android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@f8ec928 -- permission denied for window type 2002

附悬浮相关,转载文章

Android应用内悬浮窗的实现方案

Android 悬浮窗权限各机型各系统适配大全

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

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

推荐看看这个demo,star不多。有吸附,点击展开,定时缩小,交互体验不错

https://github.com/pengjianbo/FloatViewFinal

跳转系统设置界面开启权限库:

https://github.com/czy1121/settingscompat

star多,比较新

https://github.com/yhaolpz/FloatWindow

2020.8.14目前各种投机取巧的方式都不要用了,如果不需要桌面显示,就用这个(不需要权限,是在每个页面添加最上层布局):

https://blog.csdn.net/m0_38058826/article/details/103993392

Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了相关推荐

  1. android适配华为m5,2019-05-29 Android悬浮窗适配全机型,包含8.0,小米魅族华为悬浮窗权限适配demo看这一篇就够了...

    兼容8.0,小米,魅族,华为等难适配机型都可完美适配. 悬浮窗插入接口 在实现悬浮窗之前,我们需要知道通过什么接口,能够将一个控件放入到屏幕中去. Android的界面绘制,都是通过WindowMan ...

  2. android动态图标主题,【官方秘籍】MAML动态图标百变插件完美适配全机型教程

    [官方秘籍]MAML动态图标&百变插件完美适配全机型教程 发布时间: 2016-01-27 11:29 一份manifest文件,可以同时运行在多个设备,只需要设置好在不同尺寸或密度的设备上使 ...

  3. msm android机型适配,小米系统MIUI10适配全机型了,高通机型通用适配,高通通刷包...

    原标题:小米系统MIUI10适配全机型了,高通机型通用适配,高通通刷包 今天给大家带来小米系统MIUI10,提供的是miui10稳定版高通通刷包,小米可以说是以系统开始发家的,系统流畅 功能 定制性在 ...

  4. JVM常量池最全详解-常量池/运行时常量池/字符串常量池/基本类型常量池,看这一篇就够了

    JVM常量池最全详解-常量池/运行时常量池/字符串常量池/基本类型常量池,看这一篇就够了! 常量池详解 1. 字面量和符号引用 1.1 字面量 1.2 符号引用 2. 常量池vs运行时常量池 3. 常 ...

  5. 阿里大师总结的Web安全超全知识点,看这一篇就够了

    安全是互联网公司的生命,也是每一位网民的基本需求. 但根据<2021上半年中国互联网安全报告>,我国Web攻击.恶意爬虫攻击量连年翻倍增长,Web安全根本不能得到正常保障. 由此可见,We ...

  6. msm android机型适配,魅族系统适配全机型了,Flyme8 安卓9高通通刷包,通用适配...

    手持16s 8用着挺好魅族手机可以用这个包升级底层吗我都用小米了----刷flyme对得起MIUI吗?我魅族16thplus还在用安卓8好久没有刷过机了,之前不管什么手机都要看看有没有适配这个UI,但 ...

  7. 2020腾讯Android最新面试真题解析看这一篇就够了!

    今天和大家分享"如何系统的学习Android开发",之前在面试的过程中很多面试者在问我关于学习Android开发的问题时,基本上没有"系统"两个字,大家常用的问 ...

  8. Android沉浸式状态栏,看完这篇就够了!

    背景 之前做过Android沉浸式状态栏的相关需求,但是一直忙于工作,没时间系统的整理下沉浸式相关的知识,所以今天抽出时间,写一篇 Android沉浸式状态栏的文章. 何为沉浸式 沉浸式就是要给用户提 ...

  9. Python操作Excel教程(全网最全,只看这一篇就够)

    目录 Python Excel库对比 1 Python xlrd 读取 操作Excel 1.1 xlrd模块介绍 1.2 安装xlrd模块 1.3 使用介绍 1.4 实战训练 2 Python xlw ...

最新文章

  1. 如何用数据结构解释计算机系统 常用数据结构
  2. Python Scrapy
  3. Android下载文件(一)下载进度断点续传
  4. 如何在 python 环境下 开发 Web Service
  5. 【学习笔记】Python - tkinter
  6. 数据库密码过期 怎么修改
  7. python网络爬虫实战 吕文翔_实战Python网络爬虫
  8. java excel添加公式_JAVA实现EXCEL公式专题(四)——字符串函数
  9. GALV_maptravel研究分析(1)
  10. java调用浏览器组件来_Java 网页浏览器组件介绍
  11. 计算机网络对口题目,2011-2015计算机对口升学网络试题汇总.doc
  12. Java描述设计模式(14):解释器模式
  13. 什么样的人最适合创业?
  14. 为什么显卡更新换代极快,每年都会有更强的新系列,而声卡却永远停留在了“兼容DX9的集成声卡“?
  15. FFMpeg (一) av_register_all()
  16. python随机生成11位手机号码的用户数据并存入excel表格
  17. 零延迟!海康大华宇视网络监控摄像头RTSP浏览器网页无插件播放终极解决方案
  18. JS学习笔记——APIS
  19. 敏捷开发绩效管理之四:为团队设立外部绩效目标(目标管理,外向型绩效)
  20. 银行常用加密算法PINBlock加密

热门文章

  1. 为什么阿里巴巴禁止开发人员使用isSuccess作为变量名
  2. 实现JavaScript语言解释器(二)
  3. 计算机毕业设计Java社交物联网的服务搜索系统(源码+系统+mysql数据库+lw文档)
  4. 音视频技术开发周刊 | 229
  5. [xms]西软xms试算平衡报表-穿透明细报表-增加储值卡卡号列
  6. 怎么判断一个整数是2的倍数
  7. Android6.0 Sensor架构和问题分析
  8. bzoj2038: [2009国家集训队]小Z的袜子(hose)(莫队)
  9. 电脑开始怎么设置计算机用户名,如何修改电脑登录用户名以及密码呢?5秒钟让你学会...
  10. 快手2019校招笔试题