无障碍快捷方式图标

问题背景

测试反馈,无障碍快捷方式和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

        <service
            android:name=".MyAccessibilityService"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
            android:enabled="true"
            android:exported="false">
            <intent-filter>
                <action
                    android:name="android.accessibilityservice.AccessibilityService" />
            </intent-filter>
            <meta-data
                android: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"/>

相关推荐

  1. 障碍快捷方式图标

    2024-07-12 13:12:02       26 阅读
  2. Android 静默安装二(障碍服务版)

    2024-07-12 13:12:02       40 阅读
  3. Windows10去除电脑桌面上的图标快捷方式

    2024-07-12 13:12:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 13:12:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 13:12:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 13:12:02       57 阅读
  4. Python语言-面向对象

    2024-07-12 13:12:02       68 阅读

热门阅读

  1. 每天一个数据分析题(四百二十三)- 置信区间

    2024-07-12 13:12:02       18 阅读
  2. 原来没分库分表,后期如何分库分表?

    2024-07-12 13:12:02       21 阅读
  3. js 移动数组元素的几个方法

    2024-07-12 13:12:02       17 阅读
  4. 使用C# 实现期望最大化算法

    2024-07-12 13:12:02       19 阅读
  5. [NLP Begin] Classical NLP Methods - HMM

    2024-07-12 13:12:02       25 阅读
  6. 【ELK】filebeat 和logstash区别

    2024-07-12 13:12:02       17 阅读
  7. 行为模式9.策略模式------促销活动设计方案

    2024-07-12 13:12:02       20 阅读