ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-设备管理接收器在少数版本中不起作用

2019-11-08 06:33:58  阅读:207  来源: 互联网

标签:device-admin android


我正在开发一个安全应用程序,可以保护设备免受陌生人的侵害.

在我的应用程序中,如果用户尝试使用错误的PIN /图案/密码解锁设备,我应该具有从前置摄像头捕获图像的功能.

我有这样的代码.

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不起作用.设备管理员已正确激活.我尝试再次禁用它并重新激活它.我尝试重新启动设备.但是没有任何效果.我可以在我的堆栈跟踪中看到此日志.

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}

到目前为止,在所有我能看到的Android 6.0(棉花糖版本)和Android 7.1.1(如果有帮助的话,它的Motorola设备)中都可以看到此问题.

我已经检查了以下问题:

> Android 4.0 Device Admin Receiver not working
> Android Device Admin not working
> Having trouble receiving ACTION_PASSWORD_SUCCEEDED and ACTION_PASSWORD_FAILED intents

它们与我的admin.xml文件无关,并且清单声明很好,并且可以在所有其他版本为Android 7、8、9的设备中使用.

我已经测试过使用模式,有效的PIN超过了最小长度.我根本没有设置其他密码限制.

我仍然向清单部分显示admin.xml进行验证.

清单声明:

....
<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>

admin.xml文件:

<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-policies>
        <watch-login />
    </uses-policies>
</device-admin>

有人可以解决这个问题吗?

让我知道是否需要任何特殊权限/或强制设置.

附注:我测试了一些代码更改.当我在admin.xml中添加必要的策略时,同一设备管理员可以正确执行lockNow()函数.因此,设备管理员已正确设置.那么,可能不会调用onPasswordFailed的问题是什么?

我还尝试在清单中为ACTION_PASSWORD_FAILED添加意图过滤器.没什么区别.

<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>

解决方法:

void onPasswordFailed(Context context,Intent intent,UserHandle user)仅适用于Oreo及更高版本.

为了向后兼容,还需要重写onPasswordFailed(Context context,Intent intent).这将使您的代码在Nougat及以下版本上运行.

标签:device-admin,android
来源: https://codeday.me/bug/20191108/2006236.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有