Android activity.stopLockTask() 导致 SecurityException

Android activity.stopLockTask() causing SecurityException

我正在 Activity 上调用 stopLockTask,但是在打开和关闭锁定任务模式几次之后,调用最终会导致 Security Exception:

SecurityException: uid 无效,应为 0。

我不确定为什么会这样。 activity和调用startLockTask是同一个,调用的时候不是null,但是还是报错

代码非常简单,所以不确定是否有足够的代码片段可以提供帮助。片段正在调用 getActivity().startLockTask()getActivity.stopLockTask()

我是不是漏掉了什么明显的东西?

这需要设置 DPC first. Lock task mode explains this step by step; as it seems, there are only certain devices 支持。错误消息 SecurityException: Invalid uid, expected 0 通常表示您不是 运行 设备所有者或管理员,这会导致“不”。自从最近将 GSuite 迁移到 Workplace 以来,还有两个级别的终端设备管理计划可用——这可能最终会限制或启用终端设备管理的可能性(我不知道)。这比为自助服务终端模式设置一台 PC 更困难 - 因为没有 ROOT_UID 0 通常转化为:“不拥有设备”(与销售人员可能告诉您的相反)。这就是 SecurityException 被抛出的原因......除非首先获得设备所有权。

AndroidManifest.xml 显示锁定任务模式所需的环境。
但是当前状态不确定,因为不再接受自定义 DPC。
所以这可能不是错误的,但陈旧到过时的信息;见第二部分。


2021 年更新。
刚刚看到 Android 管理 API 正在被建议,
是否有类似的设备策略这可能与您正在尝试做的类似...

不是锁任务模式的应用,而是KIOSK模式正在安装的应用:

"applications": [
  {
    "packageName": "com.example.app",
    "installType": "KIOSK",
    "defaultPermissionPolicy": "GRANT"
  }
]

还有一个 google-api-services-androidmanagement 库,
这两者通常都是更适合未来的选择。