我这样使用它:
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()
只是返回错误,就是这样。
再次案例:
- 密码已设置
- 调用
setResetPasswordToken()
- 调用
resetPasswordWithToken()
- 方法
resetPasswordWithToken()
抛出该错误或返回 false
解决方案:
我只在上面解释的一种情况下注意到该错误。
发生这种情况是由于设备的特殊性。
您可以将该 resetPasswordWithToken()
方法封装到 try{}catch{}
中,并在某些设备上发生错误时返回 false。
最后,要重置密码,用户需要通过阻止屏幕来确认其密码,然后等待用户自己阻止屏幕,通过 lockNow()
或者当用户的屏幕屏幕超时时再次输入密码。已过期。当此 isResetPasswordTokenActive()
为 true 后,您可以通过 resetPasswordWithToken()
重置用户密码。
重置密码案例:
再次案例:
- 密码已设置
- 调用
setResetPasswordToken()
- 等待用户确认密码(通过
lockNow()
或只是等待) - 调用
resetPasswordWithToken()
- 方法
resetPasswordWithToken()
应该已成功更改
关于android - DevicePolicyManager.resetPasswordWithToken 抛出 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64197537/