我有以下问题.我正在尝试制作一个锁定屏幕的应用程序.通过DevicePolicyManager的方法非常有效.到现在为止还挺好.但是当我使用DPM锁定手机时,指纹解锁方法正在禁用,我必须输入我的模式(或PIN或我设置的任何内容)来解锁手机.如果我以正常方式(即使用电源按钮)锁定指纹解锁工作.
所以我的问题是如何以编程方式锁定屏幕,然后能够通过指纹解锁它?
PS:我有一个带有棉花糖谱系的星系s5 mini
我最近开始探索Android设备策略管理API,并且遇到了一些问题.我只是启用设备管理时遇到问题.我很确定这是清单条目的问题,但是我无法确定问题区域.
清单条目:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example"
android:versionCode="1"
android:versionName="1.0">
<application android:label="DeviceAdminTrial" android:icon="@drawable/icon" android:debuggable="true">
<activity android:name=".MyActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name=".Receiver"
android:label="device_admin"
android:permission="android.permission.BIND_DEVICE_ADMIN"/>
<meta-data android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
</intent-filter>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
错误信息:
12-25 15:42:38.930: WARN/DeviceAdminAdd(394): Unable to retrieve device policy ComponentInfo{com.example/com.example.Receiver}
org.xmlpull.v1.XmlPullParserException: No android.app.device_admin meta-data
Run Code Online (Sandbox Code Playgroud)
device_admin.xml
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<limit-password />
<watch-login />
<reset-password />
<force-lock />
<wipe-data />
</uses-policies>
</device-admin>
Run Code Online (Sandbox Code Playgroud)
启用方法:
enable = (Button)findViewById(R.id.button);
enable.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
Intent …Run Code Online (Sandbox Code Playgroud) 我正在尝试在用户单击按钮时启用设备管理。但是,设备管理员永远不会显示。调试后,应用程序似乎在不执行任何操作的情况下传递了 Activity。
我在 API 16 和 API 21 设备上进行了测试,均高于 API 级别 8 要求。
以下是我的清单的相关部分:
<!-- Add Device Activity -->
<activity
android:name=".AddDeviceActivity"
android:label="@string/title_activity_add_device" />
<!-- Device Admin Receiver -->
<receiver
android:name=".AmayalockAdminReceiver"
android:description="@string/txt_device_admin_description"
android:label="@string/title_device_admin"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<meta-data
android:name="android.app.device.admin"
android:resource="@xml/device_admin" />
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
我的 device_admin xml 文件:
<?xml version="1.0" encoding="utf-8"?>
<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
<uses-policies>
<force-lock />
</uses-policies>
</device-admin>
Run Code Online (Sandbox Code Playgroud)
我的活动:
public class AddDeviceActivity extends Activity {
private static final int REQUEST_CODE_ENABLE_ADMIN = 1;
// Interaction with the DevicePolicyManager
DevicePolicyManager mDPM;
ComponentName mDeviceAdmin; …Run Code Online (Sandbox Code Playgroud) 我正在开发一款安全应用程序,可以保护设备免受陌生人的侵害。
在我的应用程序中,如果用户尝试使用错误的 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
.
.
.
}
....
....
}
Run Code Online (Sandbox Code Playgroud)
在几乎所有版本中,我都能正确捕获图像,并且应用程序运行良好。
问题是:在某些设备中该功能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}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我能看到的所有 Android 6.0(棉花糖版本)和 Android …
在Android Q / Android 10使用USES_POLICY_DISABLE_KEYGUARD_FEATURES中keyguard_features导致安全异常。
devicePolicyManager.setKeyguardDisabledFeatures(componentName, DevicePolicyManager.KEYGUARD_DISABLE_FEATURES_NONE);
Run Code Online (Sandbox Code Playgroud)
java.lang.SecurityException: Admin ComponentInfo{ ... } 不是设备所有者或配置文件所有者,因此可能不使用策略:disable-keyguard-features
经过进一步检查,我发现 android pie 已标记为KEYGUARD_FEATURESdeprecated 并在android-q / Android 10. 有没有其他替代方法可以禁用keyguard_features
如何从设备远程擦除数据?
我已经尝试过设备管理中给出的示例代码.我们可以在本地擦除所有设备数据并将设备重置为出厂设置.
给出以下链接
http://developer.android.com/guide/topics/admin/device-admin.html
现在我想要远程擦除数据的代码.即如果手机丢失,用户可以远程擦除手机数据.请有人帮忙吗
我尝试使用DeviceAdminReceiver锁定设备并尝试启用以下管理:
if (!mDPM.isAdminActive(mDeviceAdminSample)) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN)
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Additional text explaining why this needs to be added."); startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
并得到如下错误:
错误/错误(1022):java.lang.SecurityException:uid 10045没有为策略#3拥有的活动管理员
请给我一些代码解决方案以及如何启用管理权限.
您好,我想在应用程序启动时启动/激活设备管理而不使用 Intent。现在我正在使用这段代码:
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, Global.mDeviceAdminSample);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
"Additional text explaining why this needs to be added.");
startActivityForResult(intent, RESULT_ENABLE);
Run Code Online (Sandbox Code Playgroud)
但我不想使用 Intent。我想直接启动设备管理。
谁能知道我该怎么做?
谢谢。
使用DevicePolicyManager在Android 6.0中执行lockNow()后,我们如何保留无缝指纹解锁效果?
假设在具有指纹扫描仪的设备上,应用程序调用lockNow()具有"USES_POLICY_FORCE_LOCK"并且已被授予设备管理员状态.
这是lockNow()函数的文档:
public void lockNow()
立即锁定设备,就像锁定屏幕超时在此呼叫时已过期一样.
呼叫设备管理员必须已请求USES_POLICY_FORCE_LOCK才能调用此方法; 如果没有,则抛出安全异常.
获得设备管理员状态并执行锁定就好了.为了便于参考,请参阅我使用的方法的SO问题.
问题是在手机锁定后,指纹扫描仪不再能够顺利解锁手机.相反,指纹扫描仪会提示我输入后备PIN码. 为了在执行lockNow()调用后保留指纹解锁效果,Android 6.0中是否有新功能?
我查看了所有的DevicePolicyManager标志(在文档中),它似乎提供了禁用事物而不是启用事物.
谢谢!
我正在尝试使自己的反馈应用程序完全支持自助服务终端,我尝试了很多解决方案,但没有什么可以完全满足我的需求。这是我发现的东西。
1.将我的应用设置为设备管理员/所有者应用(锁定任务)-
如果我们遵循此链接/过程https://developer.android.com/work/dpc/dedicated-devices/lock-task-mode,则存在一些限制,如下所示:
一种。我们必须将安装了“反馈”应用程序的所有设备恢复出厂设置,并按照一些步骤将其设置为“管理”应用程序(启动器应用程序)。
b。可以使用命令行安装该应用程序,每次安装都需要通过cmd进行一些代码行,这意味着安装人员必须随计算机一起去,并使用USB连接设备,然后使用命令安装该应用程序。
C。应用程序更新也将遵循相同的步骤(无法使用Google Play商店执行)
d。在这种情况下,最终用户将永远无法退出我们的应用程序,重新启动设备还会每次都启动相同的反馈应用程序。
2.以编程方式进行屏幕固定+以编程方式进行音量和电源按钮控制。(https://github.com/mrugacz95/kiosk)
一种。在这种情况下,我们将使应用程序处于屏幕固定模式,其中所有三个底部按钮(“概览”,“主页”,“最近”)将被隐藏/禁用。和电源键和音量键相同。
b。因此,只要用户单击信息亭模式,就会向用户显示屏幕固定系统生成的提示,但是最大的缺点是,一旦用户同时按下概述和最近的按钮,应用程序将被取消固定/解锁。
3.第三种情况是,所有键均受控制,包括电源+声音+后退+概述等。 仅按Home键可使该应用程序在后台运行,而在几秒钟内它将再次成为前台。
因此,到目前为止我所发现的一切还不是很令人满意。还有一个问题-
Is this something to be fully controlled by MDM(Mobile Device Management)?
任何帮助表示赞赏。
android ×10
device-admin ×10
fingerprint ×2
android-10.0 ×1
kiosk ×1
kiosk-mode ×1
lockscreen ×1
mdm ×1
policy ×1