Android 设备管理接收器在少数版本中不工作
我正在开发一个安全应用程序,它可以保护设备免受陌生人的攻击 在我的应用程序中,如果用户试图用错误的PIN/模式/密码解锁设备,我有一个功能可以从前置摄像头捕获图像 我有一个类似这样的代码Android 设备管理接收器在少数版本中不工作,android,device-admin,Android,Device Admin,我正在开发一个安全应用程序,它可以保护设备免受陌生人的攻击 在我的应用程序中,如果用户试图用错误的PIN/模式/密码解锁设备,我有一个功能可以从前置摄像头捕获图像 我有一个类似这样的代码 public class MyAdminReceiver extends DeviceAdminReceiver { @Override public void onPasswordFailed(Context context, Intent intent, UserHandle user)
public class MyAdminReceiver extends DeviceAdminReceiver {
@Override
public void onPasswordFailed(Context context, Intent intent, UserHandle user) {
Log.d("MyTag", "onPasswordFailed called");
//Code for starting a service for image capture goes here
.
.
.
}
....
....
}
在几乎所有的版本中,我都能正确地捕获图像,并且应用程序运行良好
问题是:在一些设备中,onPasswordFailed
功能不起作用。设备管理员已正确激活。我尝试再次禁用它并重新激活它。我试着重新启动设备。但什么都没用。我可以在stacktrace中看到此日志
03-09 12:04:48.078 18491-18491/com.my.pkgname D/ActivityThread: BDC-Calling onReceive: intent=Intent { act=android.app.action.ACTION_PASSWORD_FAILED flg=0x10 cmp=com.my.pkgname/.receivers.MyAdminReceiver }, receiver=com.my.pkgname.receivers.MyAdminReceiver@30c2044b
03-09 12:04:48.079 18491-18491/com.my.pkgname D/ActivityThread: BDC-RECEIVER handled : 0 / ReceiverData{intent=Intent { act=android.app.action.ACTION_PASSWORD_FAILED flg=0x10 cmp=com.my.pkgname/.receivers.MyAdminReceiver } packageName=com.my.pkgname resultCode=-1 resultData=null resultExtras=null}
到目前为止,我所能看到的安卓6.0(棉花糖版本)和安卓7.1.1(摩托罗拉设备,如果有帮助的话)的所有设备都存在这个问题
我已经检查了以下问题:
....
<application>
....
<receiver
android:name=".receivers.MyAdminReceiver"
android:exported="true"
android:enabled="true"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
<action android:name="android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED" />
</intent-filter>
</receiver>
....
</application>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<watch-login />
</uses-policies>
</device-admin>
void onPasswordFailed(上下文上下文、意图、用户句柄用户)
仅适用于Oreo及以上版本
为了向后兼容,您还需要覆盖
onPasswordFailed(上下文、意图)
。这将使您的代码在牛轧糖及以下产品上运行。您能给出测试设备的名称或型号吗?工作和不工作。在Moto E4(7.1.1)中不工作。在redmi工作注释5(8.1.0)@Vasudevvvyas
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
<action android:name="android.app.action.ACTION_PASSWORD_FAILED" />
<action android:name="android.app.action.ACTION_PASSWORD_SUCCEEDED"/>
</intent-filter>