无法接收ACTION_PASSWORD_SUCCEEDED和ACTION_PASSWORD_FAILED意图

时间:2011-11-09 15:32:24

标签: java android android-intent

我正在使用Android的管理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()设置了最小密码长度。如果输入的密码小于最小长度,则密码输入活动不会触发PASSWORD_FAILED意图。此外,只有在成功输入错误密码(PASSWORD_FAILED已触发)之前,才会触发PASSWORD_SUCCEEDED。因此,连续两个成功的密码不会触发第二个意图。

2 个答案:

答案 0 :(得分:0)

您可以使用android.intent.action.USER_PRESENT。只要用户解锁设备,就会触发此意图。您可以注册广播接收器,捕获android.intent.action.USER_PRESENT以检测设备解锁事件。

答案 1 :(得分:0)

这里的答案非常晚,但我遇到了同样的问题而你的'固定'编辑帮助我解决了原因。

正如你所说,这根本没有很好的记录,所以可能会产生误导。 documentation表示任何密码失败都会导致调用onPasswordFailed。

  

ACTION_PASSWORD_FAILED

     

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

然而,事实并非如此。仅当密码/ PIN /模式满足默认策略时,才会调用onPasswordFailed。这与您的最小密码长度不同。

虽然我找不到任何说明默认策略的文档,但它似乎是4个数字(PIN),4个字符(密码)或4个点(模式)。任何低于这些的东西都不会触发通话。

例如,将最小长度设置为6并将密码设置为123ABC。现在尝试使用以下命令登录: -

  • 123 - onPasswordFailed未被调用
  • 123A - onPasswordFailed被称为

很好的小测试项目here你可以试试这个。

尽管你可能已经从这个问题中得到了很好的发展,但其他人可能会获得一些清晰度。

干杯。