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

小米Mi 9T设备Android无障碍权限请求异常问题求助

解决方案:MIUI设备上无障碍权限跳转与检测问题

问题1:跳转无障碍设置页面不符合预期

MIUI对系统设置Intent的处理有定制化修改,直接使用硬写字符串的android.settings.ACCESSIBILITY_SETTINGS可能无法打开正确页面,修复方案如下:

修复代码

this.btn_permission.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // 使用官方Intent常量替代硬写字符串
        Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
        // 针对MIUI添加包名参数,引导至应用相关设置区域
        intent.putExtra("package", context.getPackageName());
        // 确保Intent可被解析,避免崩溃
        if (intent.resolveActivity(context.getPackageManager()) != null) {
            startActivity(intent);
        } else {
            // 备选方案:打开应用信息页面,引导用户手动进入权限设置
            Uri appUri = Uri.fromParts("package", context.getPackageName(), null);
            Intent appInfoIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, appUri);
            startActivity(appInfoIntent);
        }
    }
});

问题2:权限开启后无法识别

原代码通过读取Secure系统设置字段检测权限,MIUI可能修改了该字段的存储逻辑导致检测失效。应使用官方AccessibilityManagerAPI检测,同时修正UI操作的线程问题:

修复代码

  1. 替换权限检测方法
public static boolean isEnabled(Context context) {
    AccessibilityManager accessibilityManager = 
        (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
    // 获取所有已启用的无障碍服务
    List<AccessibilityServiceInfo> enabledServices = 
        accessibilityManager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
    ComponentName targetService = new ComponentName(context, NotificationService.class);
    
    for (AccessibilityServiceInfo serviceInfo : enabledServices) {
        if (targetService.equals(serviceInfo.getResolveInfo().serviceInfo.componentName)) {
            return true;
        }
    }
    return false;
}
  1. 修正TimerTask的线程问题(UI操作必须在主线程执行)
private Handler mainHandler = new Handler(Looper.getMainLooper());

public void timerStart() {
    this.timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            if (isEnabled(Accessibility.this)) {
                Accessibility.this.timer.cancel();
                // 切换到主线程执行页面跳转
                mainHandler.post(() -> {
                    Accessibility.this.finishAndRemoveTask();
                    startActivity(new Intent(Accessibility.this, MainActivity.class));
                });
            }
        }
    }, 0, 500);
}

额外优化:替换轮询为设置监听

避免Timer轮询消耗资源,可通过ContentObserver监听无障碍设置变化:

private ContentObserver accessibilityObserver;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ... 其他初始化代码
    
    accessibilityObserver = new ContentObserver(mainHandler) {
        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            if (isEnabled(Accessibility.this)) {
                finishAndRemoveTask();
                startActivity(new Intent(Accessibility.this, MainActivity.class));
                getContentResolver().unregisterContentObserver(this);
            }
        }
    };
    // 注册监听
    getContentResolver().registerContentObserver(
        Settings.Secure.getUriFor(Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES),
        true,
        accessibilityObserver
    );
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (accessibilityObserver != null) {
        getContentResolver().unregisterContentObserver(accessibilityObserver);
    }
    if (timer != null) {
        timer.cancel();
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:37:49