IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 无障碍检测 -> 正文阅读

[移动开发]无障碍检测

牙叔教程 简单易懂

无障碍概念

无障碍服务是一种应用程序,给有残疾的用户或暂时无法与设备完全交互的用户提供了更好的无障碍用户交互功能, 比如驾驶、照顾小孩或者在吵闹的派对上可能需要额外或者替代的交互反馈。
?

Android提供标准的辅助功能服务,包括TalkBack,开发人员可以创建和分发自己的服务。

环境

Autojs版本: 9.0.8
安卓版本: 11
手机: 小米11pro
?

检测无障碍方式

1. 普通的无障碍检测
let am = context.getSystemService(android.content.Context.ACCESSIBILITY_SERVICE);
let isAccessibilityEnabled_flag = am.isEnabled();
log(isAccessibilityEnabled_flag);
2. TalkBack检测, 0关闭1开启
// 检查无障碍服务是否以TalkBack的方式开启
let isExploreByTouchEnabled_flag = isScreenReaderActive(context);
log(isExploreByTouchEnabled_flag);

function isScreenReaderActive(context) {
  // 通过Intent方式判断是否存在以TalkBack方式提供服务的Service,还需要判断开启状态
  let SCREEN_READER_INTENT_ACTION = "android.accessibilityservice.AccessibilityService";
  let SCREEN_READER_INTENT_CATEGORY = "android.accessibilityservice.category.FEEDBACK_SPOKEN";
  let screenReaderIntent = new Intent(SCREEN_READER_INTENT_ACTION);
  screenReaderIntent.addCategory(SCREEN_READER_INTENT_CATEGORY);
  let screenReaders = context.getPackageManager().queryIntentServices(screenReaderIntent, 0);
  if (screenReaders == null || screenReaders.size() <= 0) {
    log("没有TalkBack类型的service");
    return false;
  }

  let hasActiveScreenReader = false;
  if (Build.VERSION.SDK_INT >= 26) {
    // 高版本可以直接判断服务是否处于开启状态
    len = screenReaders.size();
    for (var i = 0; i < len; i++) {
      screenReader = screenReaders.get(i);
      log(screenReader);
      hasActiveScreenReader |= isAccessibilitySettingsOn(
        context,
        screenReader.serviceInfo.packageName + "/" + screenReader.serviceInfo.name
      );
    }
  } else {
    // 判断正在运行的Service里有没有上述存在的Service
    let runningServices = new ArrayList();
    let manager = context.getSystemService(Context.ACTIVITY_SERVICE);
    let services = manager.getRunningServices(java.lang.Integer.MAX_VALUE);
    var len = services.size();
    for (var i = 0; i < len; i++) {
      service = runningServices.get(i);
      runningServices.add(service.service.getPackageName());
    }

    len = screenReaders.size();
    for (var i = 0; i < len; i++) {
      screenReader = screenReaders.get(i);
      if (runningServices.contains(screenReader.serviceInfo.packageName)) {
        hasActiveScreenReader |= true;
      }
    }
  }

  return hasActiveScreenReader;
}

// To check service is enabled
function isAccessibilitySettingsOn(context, service) {
  let mStringColonSplitter = new TextUtils.SimpleStringSplitter(":");
  let settingValue = Settings.Secure.getString(
    context.getApplicationContext().getContentResolver(),
    Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES
  );
  if (settingValue != null) {
    mStringColonSplitter.setString(settingValue);
    while (mStringColonSplitter.hasNext()) {
      let accessibilityService = mStringColonSplitter.next();
      if (accessibilityService.equalsIgnoreCase(service)) {
        return true;
      }
    }
  }
  return false;
}

在这里插入图片描述

TalkBack使用踩坑

点击一次=选中, 选中后点击两次=选择,
滑动用两根手指

TalkBack概念

TalkBack 是安卓设备内置的一款屏幕阅读器。
TalkBack 会为您提供语音反馈,保证您在视力不便的情况下也能使用移动设备。
?

在点击到按钮或开关的时候以语音的形式告知您这个按钮/开关的名称,
在选中的基础上双击两次屏幕将其打开,
?

您也可以按住屏幕进行拖动以便了解到当前页面都有哪些按钮/开关及其他可点击的控件。

TalkBack类名
com.google.android.marvin.talkback/com.google.android.marvin.talkback.TalkBackService 
对应的app

在这里插入图片描述

?

检测方式

要么黑名单, 要么白名单

  • 黑名单, 就是拉黑autojs, easyclick, ctrljs, android开发工具箱, 等等此类的包名或者其他特征
  • 白名单, 只允许小米, 华为, 一加, oppo等手机自带的无障碍服务

?

活动

官方渠道免费领取爱奇艺7天vip会员,真实有效, 点击速领!!!
?

名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, 安卓文档, autojs文档, 最后才是群里问问
— 牙叔教程

声明

部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

bilibili

牙叔教程

微信公众号 牙叔教程

在这里插入图片描述

QQ群

747748653
在这里插入图片描述
?

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 12:58:23  更:2021-10-04 12:59:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 15:03:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码