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

但是我在开发时遇到高版本 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. EF Core迁移 (provider: SSL Provider, error: 0 - 证书链是由不受信任的颁发机构颁发的。)

    A connection was successfully established with the server, but then an error occurred during the log ...

  2. php正方形图片转成成圆形图片-GD

    /** * 剪切图片为圆形 * @param $picture 图片数据流 比如file_get_contents(imageurl)返回的东东 * @return 图片数据流 */ private ...

  3. python socket 开发

    socket 服务端开发 #socket 服务端开发 import socket # 创建socket 对象 socket_server = socket.socket() # 绑定ip 地址和端口 ...

  4. 访问第三方接口带Authorization认证

    第一种方式 HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.add("Authorization", " ...

  5. 解决:webpack打包js项目ie11浏览器下报promise 未定义

    项目背景:webpack+js+seajs  引入文件用require或者define 1.下载依赖包 npm install  babel-polyfill 2.引入该依赖:webpack.conf ...

  6. 51nod 1594 Gcd and Phi

    Link 题解: $ans = \sum_{i = 1}^{n}\sum_{j = 1}^{n}phi(gcd(phi(i), phi(j)))$ $=\sum_{d = 1}^{n}phi(d)\s ...

  7. python 使用异常来中断/暂停线程

    """"python 使用异常来中断/暂停线程h_thread 线程句柄stoptype 线程停止类型,返回1则正常中断了线程""" ...

  8. 肖sir_多线程Thread(threading)__知识点

    多线程Thread(threading) 一.理论知识 二.实战

  9. Fiddler自动响应

    自动响应 自带了几个自动响应的规则: regex:(?inx).+.jpg$ # 以jpg结尾 这里写的是正则表达式,所以如果要拦截其他格式只需要改请求文件的后缀名即可. regex:(?inx).+ ...

  10. D. Triangle Coloring

    https://codeforces.com/contest/1795/problem/D #include <iostream> #include <cstring> #in ...