DevicePolicyManager.resetPasswordWithToken引发NPE

问题描述

我这样使用它:

            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,Samsung A51,应用是设备所有者。怎么了?

解决方法

如果用户不是设备上的管理员,则Probaby内部实现会将令牌设置为null。检查isResetPasswordTokenActive()返回什么。