遇到接收ACTION_PASSWORD_SUCCEEDED和ACTION_PASSWORD_FAILED意图的问题。

5

我正在使用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=======================");        
}

启用,禁用和密码更改功能正常,但密码失败和成功的功能不起作用。奇怪的是,它们会偶尔工作一次,然后停止工作。我的代码有问题吗,还是可能是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。所以连续两次成功输入的密码将不会触发第二个意图。


你是怎么解决这个问题的?我把最小长度设为0,但仍然没有出现“转换失败”的提示。我在想可能是其他组件设置了最小长度,在这种情况下,我无能为力。你有什么想法吗? - Jeffrey Blattman
请问loncannon能否指导一下,您是如何解决这个问题的? 如何获取每次输入的密码,无论是正确还是错误。 我被卡住了 :/ - Salmaan
这是一段时间之前的事了,所以我记不清楚是否“修复”了它。上述问题是一个研究项目中的问题,该项目早已完成。我想“FIXED”并不是最好的标题,我更确切地说是找到了为什么会出现一些奇怪的行为。 - Ioncannon
嗨,我遇到了问题。你能帮忙吗?https://dev59.com/ZbLma4cB1Zd3GeqPaWYN - Ana
2个回答

2

虽然我回答晚了,但是我遇到了同样的问题,你的“已解决”编辑帮助了我找出原因。

正如你所说,这方面的文档并不是很完善,因此可能会误导人。 文档 表明,任何密码失败都将调用 onPasswordFailed。

ACTION_PASSWORD_FAILED

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

然而,这并不是真的。只有在密码/PIN/Pattern 符合默认策略时,才会调用 onPasswordFailed。这与您的最小密码长度不同。

虽然我找不到任何说明默认策略的文档,但它似乎是 4 个数字(PIN)、4 个字符(Password)或 4 个点(Pattern)。少于这些数量的任何内容都不会触发调用。

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

  • 123 - onPasswordFailed 不会被调用
  • 123A - onPasswordFailed 会被调用

您可以在这里找到一个不错的测试项目,您可以尝试一下。

虽然您可能已经完全解决了这个问题,但其他人可能会获得一些清晰度。

谢谢。


一个类似主题的稍微不同的问题。请看看是否能提供帮助。https://dev59.com/ZbLma4cB1Zd3GeqPaWYN - Ana

0

您可以利用android.intent.action.USER_PRESENT。每当用户解锁设备时,此意图将被触发。您可以注册一个广播接收器来捕获android.intent.action.USER_PRESENT以检测设备解锁事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接