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

无障碍快捷方式图标

问题背景

测试反馈,无障碍快捷方式和setting里的无障碍图标不一致。

无障碍快捷方式悬浮窗

1、悬浮窗在systemui中
frameworks\base\packages\SystemUI\src\com\android\systemui\accessibility\floatingmenu\AccessibilityTargetAdapter.java
图标获取方式:

final AccessibilityTarget target = mTargets.get(position);
holder.mIconView.setBackground(target.getIcon());

frameworks\base\packages\SystemUI\src\com\android\systemui\accessibility\floatingmenu\MenuInfoRepository.java

void loadMenuTargetFeatures(OnInfoReady<List<AccessibilityTarget>> callback) {callback.onReady(getTargets(mContext, ACCESSIBILITY_BUTTON));
}

2、数据来源
frameworks\base\core\java\com\android\internal\accessibility\dialog\AccessibilityTargetHelper.java

public static List<AccessibilityTarget> getTargets(Context context,@ShortcutType int shortcutType)

AccessibilityTarget Icon数据来自
frameworks\base\core\java\com\android\internal\accessibility\dialog\AccessibilityServiceTarget.java

AccessibilityServiceTarget(Context context, @ShortcutType int shortcutType,@AccessibilityFragmentType int fragmentType,@NonNull AccessibilityServiceInfo serviceInfo) {super(context,shortcutType,fragmentType,isShortcutContained(context, shortcutType,serviceInfo.getComponentName().flattenToString()),serviceInfo.getComponentName().flattenToString(),serviceInfo.getResolveInfo().serviceInfo.applicationInfo.uid,serviceInfo.getResolveInfo().loadLabel(context.getPackageManager()),serviceInfo.getResolveInfo().loadIcon(context.getPackageManager()),convertToKey(convertToUserType(shortcutType)));
}

由此可见,systemui里直接显示的支持无障碍Service/activity的原图。

setting中的无障碍菜单

Settings\src\com\android\settings\accessibility\RestrictedPreferenceHelper.java

public List<RestrictedPreference> createAccessibilityServicePreferenceList(List<AccessibilityServiceInfo> installedServices) {Drawable icon = resolveInfo.loadIcon(mPm);
}

setting里获取方式和systemUI一样。都是通过service的resolveInfo.loadIcon(mPm);

区别:
setting里把Drawable转换成了AdaptiveIcon,再传给了preference。所以显示圆角。

private RestrictedPreference createRestrictedPreference(){preference.setIcon(Utils.getAdaptiveIcon(mContext, icon, Color.WHITE));
}
创建demo显示在无障碍

是通过android.accessibilityservice.AccessibilityService注册然后系统自动加载进去的。
AndroidManifest.xml

        <serviceandroid:name=".MyAccessibilityService"android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"android:enabled="true"android:exported="false"><intent-filter><actionandroid:name="android.accessibilityservice.AccessibilityService" /></intent-filter><meta-dataandroid:name="android.accessibilityservice"android:resource="@xml/accessibility_service_config" /></service>

res/xml/accessibility_service_config.xml

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"android:description="@string/setting_accessibility_tip"android:accessibilityEventTypes="typeWindowStateChanged"android:packageNames="com.whatsapp"android:accessibilityFeedbackType="feedbackGeneric"android:notificationTimeout="100"android:accessibilityFlags="flagDefault"android:canRetrieveWindowContent="true"/>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • centos7安装jenkins
  • Databricks 收购 Tabular 的意义:数据开放框架的胜利
  • 安全防御---防火墙实验1
  • 医疗器械FDA |FDA网络安全测试具体内容
  • 初识Laravel(Laravel的项目搭建)
  • 基于随机森林与XGBoost模型的机器故障关键因素分析
  • linux系统php开机自启动 phpfpm
  • Tomcat的安全配置
  • 运营商二三要素是什么?有什么意义
  • 打开excel时弹出stdole32.tlb
  • webpack terser-webpack-plugin 不打包注释及log
  • 几种不同的方式禁止IP访问网站(PHP、Nginx、Apache设置方法)
  • 大模型时代的目标检测
  • Android14系统应用统一裁剪方案
  • B站学习Java路线
  • 10个确保微服务与容器安全的最佳实践
  • HTTP那些事
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JAVA SE 6 GC调优笔记
  • KMP算法及优化
  • MQ框架的比较
  • nodejs实现webservice问题总结
  • python学习笔记-类对象的信息
  • spring + angular 实现导出excel
  • 对JS继承的一点思考
  • 反思总结然后整装待发
  • 给初学者:JavaScript 中数组操作注意点
  • 全栈开发——Linux
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 数据仓库的几种建模方法
  • 数组的操作
  • 线性表及其算法(java实现)
  • 组复制官方翻译九、Group Replication Technical Details
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​Spring Boot 分片上传文件
  • ​第20课 在Android Native开发中加入新的C++类
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #mysql 8.0 踩坑日记
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (~_~)
  • (1)(1.11) SiK Radio v2(一)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (26)4.7 字符函数和字符串函数
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 8 跨平台高性能边缘采集网关
  • .NET C# 使用 iText 生成PDF