我已经创建了一个kiosk应用程序,并且我正在尝试将我的设备设置为管理员。每当我检查我是否为活动管理员时,它都会返回false
private void provisionOwner() {
DevicePolicyManager manager =
(DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName componentName = BasicDeviceAdminReceiver.getComponentName(this);
if(!manager.isAdminActive(componentName)) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
startActivityForResult(intent, 0);
return;
}
if (manager.isDeviceOwnerApp(getPackageName()))
manager.setLockTaskPackages(componentName, new String [] {getPackageName()});
}在检查设备是否为管理员并且收到错误之前,我遵循了执行命令行脚本的说明。
adb shell dpm set-device-owner com.testapp/.DeviceAdminReceiver我得到的错误是

对于AndroidManifest.xml,我添加了蓝牙权限
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />对于AndroidManifest.xml,我注册DeviceAdminReceiver
<receiver
android:name="<my package>.DeviceAdminReceiver"
android:label="@string/app_name"
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>我的device_admin.xml如下:
<?xml version="1.0" encoding="utf-8"?>
<device-admin>
<uses-policies>
<wipe-data/>
<force-lock/>
<disable-camera/>
<disable-keyguard-features/>
</uses-policies>
</device-admin>为了设置Kiosk模式,我有必要让我的设备成为管理员吗?如果是这样,为什么我会收到这个错误?
发布于 2017-07-18 07:37:51
作为设备所有者和设备管理员是有区别的。您正在设置一个(设备管理员)并检查另一个(设备所有者)。
设备所有者通常在Google向导开始时的设备配置过程中设置。但也可以在使用您提到的dpm命令完成Google向导之后进行设置。仅当设备上没有帐户时,dpm命令才能设置设备所有者。由于设备所有者所拥有的控制权,如果可以对其进行设置,则设备所有者将受到限制。公司拥有的设备通常会配置MDM/EMM作为设备所有者。
设备管理员在其对设备的控制方面受到更多的限制。但它可以在任何时候添加。自从安卓企业版(android for work AfW)在棒棒糖中发布以来,每个安卓版本都限制了越来越多的设备管理员可以做的事情。
最完整的kiosk解决方案将使用应用程序将设备设置为设备所有者。我见过的其他解决方案是使用自定义启动程序通过将应用程序列入白名单来锁定设备,但这种实现存在很多安全漏洞。
查看TestDPC应用程序。Google为它提供了源代码,它将拥有你所需要的大部分,如果不是所有的话。作为设备所有者,您可以随意使用它提供的控制。
https://developers.google.com/android/work/build-dpc
https://github.com/googlesamples/android-testdpc
我的猜测是,您的应用程序没有正确设置为设备所有者或设备管理员。特别要注意的是,清单中有一个用android:permission="android.permission.BIND_DEVICE_ADMIN"声明的DeviceAdminReceiver,以及一个包含它可能使用的策略的xml资源文件。更多的源代码将有助于调试您所看到的问题。
发布于 2021-02-09 19:19:09
您只需使用:startActivity(new Intent().setComponent(new ComponentName("com.android.settings", "com.android.settings.DeviceAdminSettings")));
https://stackoverflow.com/questions/45110739
复制相似问题