【问题标题】:Having trouble receiving ACTION_PASSWORD_SUCCEEDED and ACTION_PASSWORD_FAILED intents接收 ACTION_PASSWORD_SUCCEEDED 和 ACTION_PASSWORD_FAILED 意图时遇到问题
【发布时间】:2011-11-09 15:32:23
【问题描述】:

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

On enabled、Disabled 和 PW changed 工作,但是密码失败和成功都没有。奇怪的是,他们偶尔会随机工作一次,然后停止工作。我的代码有什么问题吗,或者这可能是 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_SUCCEEDED 也仅在成功密码之前输入错误密码(PASSWORD_FAILED 触发)时触发。所以连续两个成功的密码不会触发第二个意图。

【问题讨论】:

  • 你是怎么解决这个问题的?我将最小长度设置为 0,但我仍然没有得到失败的 'cast。我在想其他一些组件设置了最小长度,在这种情况下,我无能为力。有什么想法吗?
  • 是的 loncannon 请指导我们,你是如何解决这个问题的?如何掌握每次输入的密码,无论是错误的还是好的。卡住了:/
  • 这是不久前的事了,所以如果我“修复”了它,我想不起来了。上述问题是针对一个很久以前完成的研究项目。我想 FIXED 不是最好的标题,而是我想出了为什么会出现一些奇怪的行为。
  • 嗨。我有问题。你能帮我吗? stackoverflow.com/questions/55074900/…

标签: java android android-intent


【解决方案1】:

这里的答案很晚,但我遇到了同样的问题,您的“已修复”编辑帮助我找出了原因。

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

ACTION_PASSWORD_FAILED

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

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

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

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

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

不错的小测试项目here你可以试试这个。

即使您可能已经完全摆脱了这个问题,但其他人可能会有所了解。

干杯。

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2015-08-10
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多