android - 从无障碍服务启动 Activity 不适用于小米

标签 android android-studio android-intent accessibilityservice xiaomi

我有一个无障碍服务,它必须在满足某些条件时打开一项 Activity 。
打开 Activity 的代码是这样的:

Intent intent = new Intent(WindowChangeDetectingService.this, OpenActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
我尝试了许多其他标志,例如 FLAG_ACTIVITY_BROUGHT_TO_FRONTFLAG_ACTIVITY_REORDER_TO_FRONT ,并将操作设置为:ACTION_PICK_ACTIVITY ,但它不会启动 Activity 。
我用的是小米9T,不行,同事用的是华为,对他有用,在模拟器(Pixel手机)上也可以。如何为小米设备解决此问题?

最佳答案

小米通过以下方式限制应用程序从后台启动 Activity
默认。
您必须引导用户手动允许它。 (官方的
MIUI公告:https://www.xiaomi.cn/post/9216439 )
打开此 Intent 并让用户手动允许“在后台启动”权限:

    intent.setClassName("com.miui.securitycenter", "com.miui.permcenter.permissions.AppPermissionsEditorActivity");
如何知道用户是否已经允许此权限?这里是
Internet 中找到的一段代码:
    public static boolean hasBackgroundStartPermissionInMIUI(Context context) {
        AppOpsManager ops = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
        try {
          // ops.checkOpNoThrow(op, uid, packageName)
          Field field = AppOpsManager.class.getField("OP_BACKGROUND_START_ACTIVITY");
          field.setAccessible(true);
          int opValue = (int) field.get(ops);
          Method method = ops.getClass().getMethod("checkOpNoThrow", int.class, int.class, String.class);
          Integer result = (Integer) method.invoke(ops, opValue, Process.myUid(), context.getPackageName());
          return result == AppOpsManager.MODE_ALLOWED;
        } catch (Exception e) {
          ProductionEnv.throwExceptForDebugging(e);
          return false;
        }
      }
此外,对于小米权限管理器中的其他权限。拿到小米手机,查询AppOpsManager中声明的所有常量.然后替换 declaredFields获得您想要的许可。

关于android - 从无障碍服务启动 Activity 不适用于小米,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67245527/

相关文章:

android - 在 Android 应用程序中显示日历

android - 如果未指定,我在哪里可以找到使用的实际 android 构建工具版本

android - Koin 2.2.1 : I cannot use "by viewModel" in Activity

java - 如何使用 onItemClickListener() 将单击的项目的数据传递给另一个 Activity

android - 搜索 Recyclerview - 当搜索为空时滚动到顶部

java - 到底什么时候请求运行时许可?

android - 如何使用 Android Studio 0.3.0 导入新模块(android 库项目)

android - 将位图设置为 intent extra 会导致错误

android - 未触发 ActivityNotFoundException 打开下载的 PDF 文件

android - onClickListener 在 fragment 中不起作用