我们有时候需要显示一个悬浮窗,悬浮窗由服务开启,里面会有一些操作

但是我在开发时遇到高版本 Android12 和低版本4.4 ,显示不一样的地方

这边整理了下适配的方法方案

一:根据版本不一的时候,params的type设置为不一样的type

  为  WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
或者 WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
    /**
* 设置悬浮框基本参数(位置、宽高等)
*/
private void initWindow() {
mWindowManager = (WindowManager) ServiceContext.getSystemService(Context.WINDOW_SERVICE);
wmParams = getParams();//设置好悬浮窗的参数
// 悬浮窗默认显示以左上角为起始坐标
wmParams.gravity = Gravity.LEFT | Gravity.TOP;
//悬浮窗的开始位置,因为设置的是从左上角开始,所以屏幕左上角是x=0;y=0
wmParams.x = 70;
wmParams.y = 210; //检查版本,注意当type为TYPE_APPLICATION_OVERLAY时,铺满活动窗口,但在关键的系统窗口下面,如状态栏或IME
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
wmParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
wmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
}
// wmParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
//得到容器,通过这个inflater来获得悬浮窗控件
inflater = LayoutInflater.from(ServiceContext.getApplicationContext());
// 获取浮动窗口视图所在布局
mFloatingLayout = inflater.inflate(R.layout.alert_float_video_layout, null);
// 添加悬浮窗的视图
mWindowManager.addView(mFloatingLayout, wmParams); }

二:不能忘了权限配置

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

三:高版本需要动态获取权限引导用户配置 悬浮窗权限

   //检查悬浮窗显示在app上的权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(context)) {
//启动Activity让用户授权
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
startActivity(intent);
return;
}
}

这样就能正常适配悬浮窗显示开启了

Andorid 悬浮窗的适配指北的更多相关文章

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

    这篇博客主要介绍的是 Android 主流各种机型和各种版本的悬浮窗权限适配,但是由于碎片化的问题,所以在适配方面也无法做到完全的主流机型适配,这个需要大家的一起努力,这个博客的名字永远都是一个将来时 ...

  2. Android 8悬浮窗适配

    背景 APP推出时,提示是退出还是更改账号,这个提示框是系统级别的.然而我的Android 9 会崩溃,宁外一个小伙伴Android 7运行理想.报错提示permission denied for w ...

  3. android课程表控件、悬浮窗、Todo应用、MVP框架、Kotlin完整项目源码

    Android精选源码 Android游戏2048 MVP Kotlin项目(RxJava+Rerotfit+OkHttp+Glide) Android基于自定义Span的富文本编辑器 android ...

  4. 微信网页悬浮窗交互效果的web实现

    一.微信的悬浮窗交互效果 微信更新后,发现多了个悬浮窗功能.公众号阅读,网页浏览回退后默认会出现.再点击,可以回到刚才阅读的地方.于是,再也不会遇到回复老婆的信息,再切换回来重新找刚才阅读东西的麻烦了 ...

  5. [转] iOS开发者的Weex伪最佳实践指北

    [From] http://www.cocoachina.com/ios/20170601/19404.html 引子 这篇文章是笔者近期关于Weex在iOS端的一些研究和实践心得,和大家一起分享分享 ...

  6. Android 关于悬浮窗权限的问题

    正常情况下的处理: dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)以及在清单文件中添加 <use ...

  7. 详解如何实现斗鱼、B站等全局悬浮窗直播小窗口

    最近业务需求需要我们直播返回或者退出直播间时,开一个小窗口在全局继续直播视频,先看效果图. 调研了一下当下主流直播平台,斗鱼.BiliBili等app,都是用WindowManger做的(这个你可以在 ...

  8. WindowManager 实现悬浮窗 详解

    WindowManager 实现悬浮窗 详解 一:对于想直接看效果的,可以看看我的demo app. 链接:http://sj.qq.com/myapp/detail.htm?apkName=com. ...

  9. Android悬浮窗实现 使用WindowManager

    Android悬浮窗实现 使用WindowManager WindowManager介绍 通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得  ...

  10. Android仿360手机卫士悬浮窗效果

    请看下图:                         首先是一个小的悬浮窗显示的是当前使用了百分之多少的内存,点击一下小悬浮窗,就会弹出一个大的悬浮窗,可以一键加速.好,我们现在就来模拟实现一下 ...

随机推荐

  1. Docker工作管理中实用操作

                              "build once ,run anywhere"                                       ...

  2. 3. 贪心思想(todo)

    目录 1. 分配饼干 2. 不重叠区间个数 3. 投飞镖刺破气球 5. 买卖股票最大的收益 6. 买卖股票的最大收益 II 9. 修改一个数成为非递减数组 10. 子数组的最大和 11. 分隔字符串使 ...

  3. C#判断一个字符串是否为整数

    判断一个字符串是否为数字 使用int.TryParse()方法   利用int类型自带的TryParse(string, ou int) 方法可以解决问题,此方法通过对应的输入内容string,如果是 ...

  4. OOP学习讲义

    什么是OOP 场景:我进入一家IT公司,面试官问道我这个问题.OOP?WTF?"众所周知,Java是一门面向对象的开发语言,所以OOP不就是面向对象设计咩.Java把所有的元素都当成是一个对 ...

  5. Window 连接linux系统上的Redis

    windows 设置连接linux redis   一.查看linux 6379端口是否开发 firewall-cmd --query-port=6379/tcp 如果返回no则端口没有开启 fire ...

  6. 2022-05-10内部群每日三题-清辉PMP

    1.项目经理管理的一个项目不断面临挑战.发起人经常无法做出决定,存在大量预算超支,团队成员不断从项目离职,高级管理层没有提供实际的支持.项目经理应该怎么做? A.与团队一起开会,以确定造成这些问题的原 ...

  7. 在使用IDEA提交git代码时,如何修改提交者的名字

    在Terminal终端中输入 git config user.name git config --global user.name "xl"

  8. Excel之VLOOKUP()函数的基本用法

    语法: VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup]) 规则:  注意: 查找的值:内容需要完全一样 查找范围:查找范围的 ...

  9. docker私有镜像仓库搭建(简)

    1.装包 yum install docker-registry 2.启动服务 systemctl start docker-distribution 3.打标自己的镜像 docker tag mys ...

  10. antd 动态添加表格列 表格不更新

    原因:react 对比columns 数组为原数组,内存地址没变: 解决办法:用es6的扩展,生成新数组,添加操作列operateCol setTableColumns([...tableColums ...