首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设备管理不起作用

设备管理不起作用
EN

Stack Overflow用户
提问于 2017-07-15 03:59:46
回答 2查看 1.7K关注 0票数 2

我已经创建了一个kiosk应用程序,并且我正在尝试将我的设备设置为管理员。每当我检查我是否为活动管理员时,它都会返回false

代码语言:javascript
复制
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()});
}

在检查设备是否为管理员并且收到错误之前,我遵循了执行命令行脚本的说明。

代码语言:javascript
复制
adb shell dpm set-device-owner com.testapp/.DeviceAdminReceiver

我得到的错误是

对于AndroidManifest.xml,我添加了蓝牙权限

代码语言:javascript
复制
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

对于AndroidManifest.xml,我注册DeviceAdminReceiver

代码语言:javascript
复制
    <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如下:

代码语言:javascript
复制
<?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模式,我有必要让我的设备成为管理员吗?如果是这样,为什么我会收到这个错误?

EN

回答 2

Stack Overflow用户

回答已采纳

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

票数 2
EN

Stack Overflow用户

发布于 2021-02-09 19:19:09

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45110739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档