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

Android 13/14中设备管理应用wipeData触发SecurityException问题

问题:Android 13/14中DPM wipeData操作抛出SecurityException错误

已将应用正确添加为设备管理员应用,其他DPM功能(如dpm.lockNow())可正常运行,Android 10系统中wipeData操作执行正常,但在Android 13、14系统中触发异常。

错误信息

java.lang.SecurityException : User 0 can not be removed .
中文翻译:java.lang.SecurityException:无法移除用户0。

相关代码

fun wipeData() {
    var flags = 0
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
        flags = flags.or(DevicePolicyManager.WIPE_SILENTLY)
    if (prefs.isWipeEmbeddedSim && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
        flags = flags.or(DevicePolicyManager.WIPE_EUICC)
    dpm?.wipeData(flags) 
}

原因及解决方案

核心原因

Android 13(API 33)及以上版本对设备管理员权限做了严格收紧:普通设备管理员应用不再拥有擦除主用户(User 0)数据的权限,只有具备**设备所有者(Device Owner)或配置文件所有者(Profile Owner,针对工作资料场景)**身份的应用才能执行该操作。

具体解决步骤

  1. 确认应用权限身份

    • 检查当前应用是否为设备所有者/配置文件所有者:通过dpm.isDeviceOwnerApp(packageName)或dpm.isProfileOwnerApp(packageName)判断。
    • 如果只是普通设备管理员,需要通过Android Enterprise部署流程(如NFC配对、批量注册等方式)将应用升级为设备所有者。
  2. 代码适配调整

    • 在调用wipeData前增加权限校验,避免触发异常:
      fun wipeData(context: Context) {
          val packageName = context.packageName
          val isOwner = dpm?.isDeviceOwnerApp(packageName) == true || dpm?.isProfileOwnerApp(packageName) == true
          
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && !isOwner) {
              // 无权限,处理提示逻辑,比如告知用户应用权限不足
              return
          }
          
          var flags = 0
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
              flags = flags.or(DevicePolicyManager.WIPE_SILENTLY)
          if (prefs.isWipeEmbeddedSim && Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
              flags = flags.or(DevicePolicyManager.WIPE_EUICC)
          
          try {
              dpm?.wipeData(flags)
          } catch (e: SecurityException) {
              // 捕获异常,处理错误提示
          }
      }
      
  3. 工作资料场景适配
    如果是针对工作资料擦除,确保操作的是工作用户而非主用户,可通过dpm.getProfileOwner()获取工作用户的UserHandle,wipeData默认会处理当前所有者对应的用户,无需额外指定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 07:31:09