设备管理不起作用

Device Administration not working

我创建了一个自助服务终端应用程序,我正尝试将我的设备设置为管理员。每当我检查我是否处于活动管理状态时,它 return 返回 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 模式是否有必要让我的设备成为管理员?如果是这样,为什么我会收到此错误消息?

设备所有者和设备管理员是有区别的。您正在设置一个(设备管理员)并检查另一个(设备所有者)。

设备所有者通常在 Google 向导开始的设备配置期间设置。但它也可以在使用您提到的 dpm 命令通过 Google 向导后设置。如果设备上没有帐户,dpm 命令只能设置设备所有者。设备所有者由于其具有控制权而在可以设置时受到限制。公司拥有的设备通常会配置 MDM/EMM 作为设备所有者。

设备管理员在其对设备的控制方面受到更多限制。但它可以随时添加。自从 Android Enterprise(android for work [AfW])在 Lollipop 中发布以来,每个 Android 版本对设备管理员的操作限制越来越多。

最完整的自助服务终端解决方案会将带有应用程序的设备设置为设备所有者。我见过的其他解决方案是使用自定义启动器通过将应用程序列入白名单来锁定设备,但此实现存在很多安全漏洞。

查看 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 资源文件。更多的源代码将有助于调试您看到的问题。

你只需使用: startActivity(new Intent().setComponent(new ComponentName("com.android.settings", "com.android.settings.DeviceAdminSettings")));