当前位置: 首页 > news >正文

Android AccessibilityService研究

AccessibilityService流程分析

  • AccessibilityService开启方式
  • AccessibilityService 开启原理

AccessibilityService开启方式

. 在Framework里直接添加对应用app 服务component。

loadSetting(stmt, Settings.Secure.ACCESSIBILITY_ENABLED,1);
loadSetting(stmt, Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,"com.test.app/com.test.app.service.TestService");

. 在system app中动态添加

Settings.Secure.putString(getContentResolver(),Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,"com.test.app/com.test.app.service.TestService");Settings.Secure.putInt(getContentResolver(),Settings.Secure.ACCESSIBILITY_ENABLED, 1);

. 通过intent跳转到settings里面手动添加

Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivityForResult(intent, 0);

AccessibilityService 开启原理

Settings界面的初始话会获取所有已安装的apk的无障碍服务并列表展示出来
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用户点击开启无障碍其实最终就是通过Setting secure写入对应的accessibility服务信息后通知AccessiBilityManagerService bind server,AccessiBilityManagerService 也是从Settings中读取对应的accessibility信息,所以想要使用accessibility网Settings secure写入服务信息是必须的。

@Override
142      public void onPreferenceToggled(String preferenceKey, boolean enabled) {
143          ComponentName toggledService = ComponentName.unflattenFromString(preferenceKey);
144          logAccessibilityServiceEnabled(toggledService, enabled);
145          if (!enabled) {
146              logDisabledState(toggledService.getPackageName());
147          }
148          AccessibilityUtils.setAccessibilityServiceState(getPrefContext(), toggledService, enabled);
149      }

在这里插入图片描述

在这里插入图片描述

关于默认开启无障碍服务的尝试
1 直接写入会报错

     Settings.Secure.putString(getContentResolver(),Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "com.fg/com.fg.test.TestAliveAccessibilityService");Settings.Secure.putString(getContentResolver(),Settings.Secure.ACCESSIBILITY_ENABLED, "1");Caused by: java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

2 通过权限申请的方式
可以申请成功但是依旧会permission denial
Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS
原因:在android 6.0及以后,WRITE_SETTINGS权限的保护等级已经由原来的dangerous升级为signature,这意味着我们的APP需要用系统签名或者成为系统预装软件才能够申请此权限,并且还需要提示用户跳转到修改系统的设置界面去授予此权限

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (!Settings.System.canWrite(MainActivity.this)) {Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS,Uri.parse("package:" + getPackageName()));intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivityForResult(intent, 200);} else {Settings.Secure.putString(getContentResolver(),Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "com.fg/com.fg.test.TestAliveAccessibilityService");Settings.Secure.putString(getContentResolver(),Settings.Secure.ACCESSIBILITY_ENABLED, "1");}
}
http://www.lryc.cn/news/114623.html

相关文章:

  • 华为OD机试(含B卷)真题2023 算法分类版,58道20个算法分类,如果距离机考时间不多了,就看这个吧,稳稳的
  • JMeter命令行执行+生成HTML报告
  • 学习Boost二:从附录3来看编码习惯
  • STM32基础入门学习笔记:核心板 电路原理与驱动编程
  • 最后一次模拟考试题解
  • Mac 创建和删除 Automator 工作流程,设置 Terminal 快捷键
  • 2023华为OD机试真题B卷 Java 实现【最长的元音串】
  • 网络防御之传输安全
  • 【css】组合器
  • HTTPS、TLS加密传输
  • docker frp 搭建 http + stcp 代理
  • 项目出bug,找不到bug,如何拉回之前的版本
  • vue-cli
  • android获取屏幕分辨率的正确方法;获取到分辨率(垂直方向像素)的不正确
  • 机器学习笔记之优化算法(八)简单认识Wolfe Condition的收敛性证明
  • 通过win+r安装jupyter报错
  • C#声明一个带返回值的委托
  • Flutter 自定义view
  • Ubuntu新装系统报错:sudo: vim:找不到命令
  • Vue3自定义简单的Swiper滑动组件-触控板滑动鼠标滑动左右箭头滑动-demo
  • 三个主流数据库(Oracle、MySQL和SQL Server)的“单表造数
  • TypeScript 中【class类】与 【 接口 Interfaces】的联合搭配使用解读
  • JavaWeb 手写Tomcat底层机制
  • Gof23设计模式之组合模式
  • 龙芯积极研发二进制翻译,提升软硬件兼容性,提高LoongArch架构
  • 3天爆肝整理,自动化测试-YAML文件读写实战(超细总结)
  • 算法通关村——透彻理解二分查找
  • PAT(Advanced Level)刷题指南 —— 第六弹(⭐有点难度⭐)
  • 个人对智能家居平台选择的思考
  • 无涯教程-Lua - while语句函数