android大小悬浮窗,悬浮窗不同android版本适配

本文详细分析了Android 4.4之前和之后,不同类型悬浮窗(如TYPE_TOAST)在权限检查和参数调整上的差异。通过对比源码,揭示了为何在4.4之后TYPE_TOAST不再需要权限即可显示,以及不同版本中触摸事件和按键事件的处理变化。
摘要由CSDN通过智能技术生成

实现添加悬浮窗的核心源码代码WindowManagerService#addWindow方法中有以下几个关键:

1.权限检查

mPolicy.checkAddPermission(attrs, appOp);

2.悬浮窗参数调整

mPolicy.adjustWindowParamsLw(win.mAttrs);

查看不同android版本的源码对比

结论:

android 4.4(api 19)之前使用TYPE_TOAST 可以显示,但是不能接收触摸事件和按键事件

mPolicy实际上是PhoneWindowManager。

对比checkAddPermission()方法变化结论:

android 4.3(api 18) 开始 TYPE_TOAST根本没有做权限检查, 直接break出去了, 最后返回WindowManagerGlobal.ADD_OKAY。这个就是使用TYPE_TOAST不需要权限显示悬浮窗的原因

//android 4.3_r2.1

public int checkAddPermission(WindowManager.LayoutParams attrs, int[] outAppOp) {

int type = attrs.type;

outAppOp[0] = AppOpsManager.OP_NONE;

if (type < WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW

|| type > WindowManager.LayoutParams.LAST_SYSTEM_WINDOW) {

return WindowManagerGlobal.ADD_OKAY;

}

Stri

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值