android浮标权限管理,Android辅助权限与悬浮窗
Android辅助权限与悬浮窗在执行自动化服务的流程中,我们其实并不希望被用户的操作中断流程,所以有什么方法在用户点击自动化操作的过程中,避免用户再次操作呢?那就是开启一个全局透明的悬浮窗,进行屏蔽触摸事件。
一、悬浮窗
其实一开始,我是想当然的跟以前一样,开启一个全屏的透明的悬浮窗,进行遮罩的作用,但是发现,设置 Type 为 TYPE_TOAST 或者 TYPE_SYSTEM_ALERT 这样的悬浮窗某些类型的不同,会导致不单单把用户的操作屏蔽了,甚至窗口的一些状态改变也屏蔽的,导致辅助权限的 onAccessibilityEvent() 方法不回调,于是去找官方文档,查找相关悬浮窗的 Type 类型设置。然后被我找到这个属性值的 Type :LayoutParams.TYPE_ACCESSIBILITY_OVERLAY
我们再来看官方解释:Windows that are overlaid only by a connected AccessibilityService for interception of user interactions without changing the windows an accessibility service can introspect. In particular, an accessibility service can introspect only windows that a sighted user can interact with which is they can touch these windows or can type into these windows. For example, if there is a full screen accessibility overlay that is touchable, the windows below it will be introspectable by an accessibility service even though they are covered by a touchable window.
虽然官方写的一大堆,但是我们大概能 get 到里面的意思,其实就是设置为这个类型的悬浮窗,能够使辅助功能继续响应相关窗口与内容的变化。经测试,果然设置这个类型的悬浮窗,可以一方面屏蔽用户的触摸事件,另一方继续响应自动点击的相关操作。public void createFullScreenView(Context context) {
WindowManager windowManager = getWindowManager(context); if (fullScreenView == null) {
fullScreenView = new FloatWindowFullScreenView(context);
LayoutParams fullScreenParams = new LayoutParams(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
fullScreenParams.type = LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
} else {
fullScreenParams.type = LayoutParams.TYPE_TOAST;
}
fullScreenParams.format = PixelFormat.TRANSLUCENT;
fullScreenParams.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
fullScreenParams.gravity = Gravity.CENTER;
windowManager.addView(fullScreenView, fullScreenParams);
}
}
值得注意的是,这个属性是在 android 5.1 之后加入进来,对于之前的版本,经测试,使用 Toast 类型,也能执行相关操作,至于为什么 5.1 之后不继续使用Toast类型呢,这里面涉及到悬浮窗的开启问题了,可自行百度悬浮窗的开启相关文章。
二、悬浮窗的 Context
我们一般开启悬浮窗的过程中,Context 的传递我们使用的 Service 或者 Activity,不过如果设置为 TYPE_ACCESSIBILITY_OVERLAY 的悬浮窗,是只能传入你继承自 AccessibilityService 的服务(Context,否则会报 Is Activity Running 这个异常,那如何在这个服务里面开启悬浮窗呢?我是使用广播的形式去开启的:// 注册广播接听者
IntentFilter filter = new IntentFilter();
filter.addAction(Const.ACTION_SHOW_COVER_VIEW);
filter.addAction(Const.ACTION_SHOW_SMALL_VIEW);
filter.addAction(Const.ACTION_SET_COVER_VIEW_TIPS);
registerReceiver(mReceiver, filter);
....省略其他代码
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override public void onReceive(Context context, Intent intent) {
String action = intent.getAction(); if (action.equals(Const.ACTION_SHOW_COVER_VIEW)) { if (!FloatWindowManager.getInstance().isFullWindowShowing()) {
FloatWindowManager.getInstance().createFullScreenView(TaskService.this);
}
String toast = intent.getStringExtra(Const.EXTRA_WINDOW_TOAST); if (!StringUtils.isEmpty(toast)) {
FloatWindowManager.getInstance().showToast(toast);
}
} else if (action.equals(Const.ACTION_SHOW_SMALL_VIEW)) { if (!FloatWindowManager.getInstance().isSmallWindowShowing()) {
FloatWindowManager.getInstance().createSmallWindow(TaskService.this);
}
}else if (action.equals(Const.ACTION_SET_COVER_VIEW_TIPS)) { if (FloatWindowManager.getInstance().isFullWindowShowing()) {
FloatWindowManager.getInstance().showTipst(intent.getStringExtra("tips"));
}
}
}
};
三、悬浮窗的实现
在悬浮窗的UI设计上,我们需要将其设置为透明背景,这样对用户是无感的,整个自动化流程中,其实是相当于屏幕有个用户看不到的“保护罩”在确保着你的自动化业务不被“打扰”。在布局上,我们需要实现最外层的根布局的点击事件,这样在用户点击屏幕的时候,弹窗 Toast 友好提示用户:自动化业务正在执行,请停止业务才能操作。
操作过程点击会弹出提示
同时悬浮窗提供“停止”按钮,可以终止业务并关闭全屏透明悬浮窗。
四、使用场景
部分软件需要开启许多权限才能保证软件的正常使用,例如市面上的某锁屏软件,他们需要涉及相当多的权限,如果一个个让用户去开启,可能找不到对应的权限怎么开启,于是他们把这个流程简化成脚本,只要用户开启辅助权限,则跳转到权限开启流程,自动到权限页面,把例如:开机自启动权限,读取通知,获取位置等权限开启。当然这个过程是被一个界面遮盖了的,用户是看不到执行了什么操作的(这也暴露android的安全性问题)。
某锁屏软件截图,侵权必删
作者:幕后眼光
链接:https://www.jianshu.com/p/ffa0641942a0
android浮标权限管理,Android辅助权限与悬浮窗相关推荐
- Android权限管理之Permission权限机制及使用
前言: 最近突然喜欢上一句诗:"宠辱不惊,看庭前花开花落:去留无意,望天空云卷云舒." 哈哈~,这个和今天的主题无关,最近只要不学习总觉得生活中少了点什么,所以想着围绕着最近面试过 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据 ...
- java 二进制 归属权限_【Java EE 学习 75 上】【数据采集系统第七天】【二进制运算实现权限管理】【权限分析和设计】...
一.权限计算相关分析 1.如何存储权限 首先说一下权限保存的问题,一个系统中最多有多少权限呢?一个大的系统中可能有成百上千个权限需要管理.怎么保存这么多的权限?首先,我们使用一个数字中的一位保存一种权 ...
- Yii2.0 后台UI框架以及权限管理扩展实现权限菜单管理
Yii2.0 后台UI框架以及权限管理扩展实现权限菜单管理 一.安装后台框架ui 二.安装权限管理扩展 三.实现权限菜单管理 一.安装后台框架ui composer require dmstr/yii ...
- linux查询默认权限命令,Linux权限管理之基本权限
Linux权限管理之基本权限 1.文件权限: -rw-r--r-- : r 读 w 写 x 执行 -: 文件类型(- 文件 d 目录 l软链接文件)rw- r-- ...
- JAVAWEB开发之权限管理(一)——权限管理详解(权限管理原理以及方案)、不使用权限框架的原始授权方式详解
知识清单 1.了解基于资源的权限管理方式 2. 掌握权限数据模型 3. 掌握基于url的权限管理(不使用Shiro权限框架的情况下实现权限管理) 4. shiro实现用户认证 5. shiro实现用户 ...
- android 优酷 自动全屏播放,Android如何实现仿优酷视频的悬浮窗播放效果
Android如何实现仿优酷视频的悬浮窗播放效果 发布时间:2020-07-11 10:24:43 来源:亿速云 阅读:228 作者:清晨 这篇文章主要介绍Android如何实现仿优酷视频的悬浮窗播放 ...
- Android pms权限管理,Android权限机制
为什么有权限机制 我们知道 Android 应用程序是沙箱隔离的,每个应用都有一个只有自己具有读写权限的专用数据目录.但是如果应用要访问别人的组件或者一些设备上全局可访问的资源,这时候权限机制就能系统 ...
- 原生android 权限管理,Android 权限管理(原生、EasyPermissions、RxPermissions)
前言:动态权限管理是Android6.0(Build.VERSION_CODES.M = Api23)推出的,提醒用户当前APP所需要的权限,防止滥用.这些权限一般分为三种:(1)普通权限:直接man ...
最新文章
- eclipse生成java项目出错,Java项目使用了HttpClients相关包,用eclipse导出jar包就不能正常运行Error: A JNI error has occurred...
- 尝试去读SQLMAP源码(一)
- 西华大学计算机组成原理补考卷,浙江大学航空航天学院空天信息技术保研
- 大唐波斯将军 机器人_你的工作会被机器人取代吗?
作者:大唐波斯将军2015-04-08 09:34...
- unity导入素材时材质丢失素材变成粉红色的解决方法
- 2019年Java编程开发值得学习的10大技术
- js中解决函数中使用外部函数局部变量的问题(闭包问题)
- 响应式个人简历网页源代码
- 二十年经典港台电视剧回顾
- myscript 思路整理
- fleck 客户端_关于C#使用Fleck 的websocket问题
- 联网获取360数据,识别骚扰电话,java实现
- 应用案例 | 2011款保时捷卡宴3.0T车发动机怠速间歇性抖动
- 《华尔街》观后笔记7——阳光交易
- 记录自己学习尚硅谷javaweb2022版中遇到的一些问题
- 同样是IT行业,测试和开发薪资真有这么大差别?
- mc服务器音乐文件夹在哪,我的世界 自定义音乐添加方法 MC怎么自定义音乐
- Windows下RStudio的下载与安装教程
- 微信点击短链接直接跳转到支付宝领红包教程 附带例子
- APAP多图拼接代码配置运行总结