android - DevicePolicyManager.resetPasswordWithToken 抛出 NPE

标签 android kotlin device-admin

我这样使用它:

            devicePolicyManager
                .resetPasswordWithToken(
                    componentName,
                    nonNullOrEmptyPassword,
                    nonNullOrEmptyByteArray,
                    0
                )

它会抛出 NPE:

java.lang.NullPointerException: Attempt to get length of null array
        at android.os.Parcel.createException(Parcel.java:2094)
        at android.os.Parcel.readException(Parcel.java:2056)
        at android.os.Parcel.readException(Parcel.java:2004)
        at android.app.admin.IDevicePolicyManager$Stub$Proxy.resetPasswordWithToken(IDevicePolicyManager.java:15625)
        at android.app.admin.DevicePolicyManager.resetPasswordWithToken(DevicePolicyManager.java:3959)

Android 10、三星 A51、应用程序是设备所有者。怎么了?

最佳答案

我对此进行了测试,我认为这种情况会发生在用户已设置密码时,当您在 setResetPasswordToken() 之后调用 resetPasswordWithToken() 时。我想在某些设备上它是“好的”行为,例如我曾经在华为 10 上重现它并且上面提到的情况发生了同样的问题,但在 Realme 11 上一切正常, setResetPasswordToken() 只是返回错误,就是这样。

再次案例:

  1. 密码已设置
  2. 调用setResetPasswordToken()
  3. 调用resetPasswordWithToken()
  4. 方法 resetPasswordWithToken() 抛出该错误或返回 false

解决方案: 我只在上面解释的一种情况下注意到该错误。 发生这种情况是由于设备的特殊性。 您可以将该 resetPasswordWithToken() 方法封装到 try{}catch{} 中,并在某些设备上发生错误时返回 false。 最后,要重置密码,用户需要通过阻止屏幕来确认其密码,然后等待用户自己阻止屏幕,通过 lockNow() 或者当用户的屏幕屏幕超时时再次输入密码。已过期。当此 isResetPasswordTokenActive() 为 true 后,您可以通过 resetPasswordWithToken() 重置用户密码。

重置密码案例:

再次案例:

  1. 密码已设置
  2. 调用setResetPasswordToken()
  3. 等待用户确认密码(通过 lockNow() 或只是等待)
  4. 调用resetPasswordWithToken()
  5. 方法 resetPasswordWithToken() 应该已成功更改

关于android - DevicePolicyManager.resetPasswordWithToken 抛出 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64197537/

相关文章:

Android 无法序列化 Kotlin lambda

android - 安卓设备管理

android - 具有高优先级的 Firebase 消息不会从 Doze android 6+ 唤醒设备

java - 为什么这段代码会给我一个空指针异常?

android - 如何在android中的应用程序顶层设置页脚?

java - 如何制作与图像形状完全相同的自定义形状 View

android - 使用 View 绑定(bind)时如何处理不同布局配置中缺少的 View ?

Android设备购买和测试

android - 如何更改项目点击时 ListView 的内容?

使用 Android Management API 策略时,Android Kiosk 模式不起作用