我正在使用Android的Administration API,并且具有DeviceAdminReceiver,并且覆盖了以下功能:

@Override
public void onEnabled(Context context, Intent intent)
{
    System.out.println("Admin On======================");
}

@Override
public void onDisabled(Context context, Intent intent)
{
    System.out.println("Admin Off======================");
}

@Override
public void onPasswordFailed(Context context, Intent intent)
{
    System.out.println("PW Bad============================");
}

@Override
public void onPasswordSucceeded(Context context, Intent intent)
{
    System.out.println("PW Good===========================");
}

@Override
public void onPasswordChanged(Context context, Intent intent)
{
    System.out.println("Changed PW=======================");
}

启用后,“禁用”和PW更改了工作,但是密码失败和成功密码没有成功。奇怪的是,它们偶尔偶尔工作一次,然后停止工作。我的代码有什么问题吗,或者这可能是API问题?

AndroidMaifest中的接收器
<receiver android:name="AdminReciever"
            android:label="Administration"
            android:permission="android.permission.BIND_DEVICE_ADMIN" android:enabled="true">
            <meta-data android:name="android.app.device_admin"
                android:resource="@xml/adminpolicies" />
            <intent-filter>
                <action android:name="android.app.action.ACTION_PASSWORD_SUCCEEDED"/>
                <action android:name="android.app.action.ACTION_PASSWORD_FAILED"></action>
                <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"></action>
                <action android:name="android.app.action.ACTION_PASSWORD_CHANGED"></action>

            </intent-filter>
</receiver>

固定

发现了问题,似乎没有记录在案。我已经使用dpm.setPasswordMinimumLength()设置了最小密码长度。如果输入的密码小于最小长度,则密码输入 Activity 不会激发PASSWORD_FAILED意图。另外,只有在成功输入密码之前输入了错误的密码(触发了PASSWORD_FAILED)时,才会触发PASSWORD_SUCCEEDED。因此,连续两个成功的密码不会触发第二个意图。

最佳答案

这里的回答很晚,但是我遇到了同样的问题,您的“固定”编辑帮助我弄清了原因。
正如您所说,这根本没有得到很好的记录,因此可能会产生误导。 documentation建议任何密码失败都将导致调用onPasswordFailed。

ACTION_PASSWORD_FAILED
用户输入了错误的设备或配置文件质询密码后,发送给设备管理员的操作。您现在可以使用DevicePolicyManager.getCurrentFailedPasswordAttempts()检查密码尝试失败的次数。通常,您将在onPasswordFailed(Context,Intent,UserHandle)中处理此问题。

但是,事实并非如此。仅当密码/ PIN /图案满足默认策略时,才会调用onPasswordFailed。这与您的最小密码长度不同。
尽管我找不到任何说明默认策略的文档,但它似乎是4个数字(PIN),4个字符(密码)或4个点(模式)。少于这些的任何内容都不会触发呼叫。
例如,将最小长度设置为6,并将密码设置为123ABC。现在尝试使用以下命令登录:-

  • 123-onPasswordFailed不称为
  • 123A-onPasswordFailed称为

  • 不错的小测试器项目here,可以尝试一下。
    即使您可能已经从这个问题上真正地前进了,其他人也可能会有所了解。
    干杯。

    07-26 07:48