You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redmi设备中Android无障碍服务无法获取事件问题

问题解决:Redmi设备无障碍服务AccessibilityServiceInfo实例失效

核心问题分析

  1. 事件类型赋值逻辑错误:你的代码中多次直接给info.eventTypes赋值,每次赋值都会覆盖之前的配置,最终只有最后一个事件类型TYPE_VIEW_LONG_CLICKED生效——这是通用代码问题,其他设备可能因默认配置兼容了部分事件,但本质逻辑存在错误。
  2. MIUI系统特殊限制:Redmi设备的MIUI对无障碍服务有更严格的实例校验,直接新建AccessibilityServiceInfo实例可能不被系统认可,需要基于服务已有配置修改;同时MIUI的后台管控、权限验证逻辑也会影响服务正常运行。

修正方案

1. 修复事件类型赋值逻辑

使用位或运算符(or)累加事件类型,避免覆盖:

override fun onServiceConnected() {
    super.onServiceConnected()
    // 获取服务当前的配置实例,而非新建空实例
    val info = serviceInfo ?: AccessibilityServiceInfo()
    
    Log.d("info_service_status", ":${info}")
    
    // 用位或组合所有需要监听的事件类型
    info.eventTypes = AccessibilityEvent.CONTENTS_FILE_DESCRIPTOR or
            AccessibilityEvent.CONTENT_CHANGE_TYPE_STATE_DESCRIPTION or
            AccessibilityEvent.TYPE_GESTURE_DETECTION_START or
            AccessibilityEvent.TYPE_GESTURE_DETECTION_END or
            AccessibilityEvent.TYPE_VIEW_LONG_CLICKED
    
    // 应用修改后的配置
    setServiceInfo(info)
}

2. 适配MIUI系统的额外配置

(1)添加无障碍服务静态配置文件

在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:accessibilityEventTypes="typeGestureDetectionStart|typeGestureDetectionEnd|typeViewLongClicked|contentsFileDescriptor|contentChangeTypeStateDescription"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagDefault"
    android:canRetrieveWindowContent="true"/>

然后在AndroidManifest.xml的服务声明中引用该配置:

<service
    android:name=".YourAccessibilityService"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
    <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
    </intent-filter>
    <meta-data
        android:name="android.accessibilityservice"
        android:resource="@xml/accessibility_service_config" />
</service>

(2)调整MIUI系统权限与后台设置

  • 进入「设置 → 应用设置 → 权限管理 → 无障碍」,确认应用的无障碍服务处于启用状态,且无额外限制;
  • 进入「设置 → 应用设置 → 应用管理 → 你的应用 → 省电策略」,设置为「无限制」,避免服务被后台回收;
  • 检查「设置 → 隐私保护 → 权限管理 → 读取屏幕内容」,确保应用已获取该权限。

内容的提问来源于stack exchange,提问作者Surajkaran Meghwanshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:20:31