“启用设备管理员”对话框未显示

Posted

技术标签:

【中文标题】“启用设备管理员”对话框未显示【英文标题】:"Enable Device Admin" Dialog not showing 【发布时间】:2015-07-19 17:50:39 【问题描述】:

我正在尝试在用户单击按钮时启用设备管理。但是,设备管理员永远不会显示。调试后,应用程序似乎在没有执行任何操作的情况下通过了 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>

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

我的活动:

public class AddDeviceActivity extends Activity 

private static final int REQUEST_CODE_ENABLE_ADMIN = 1;

    // Interaction with the DevicePolicyManager
    DevicePolicyManager mDPM;
    ComponentName mDeviceAdmin;

@Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_device);

        // Prepare to work with the Device Policy Manager
        mDPM = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
        mDeviceAdmin = new ComponentName(this, AmayalockAdminReceiver.class);

        // Set OnClickListener for addDevice Button
        Button addDevice = (Button)findViewById(R.id.btnAddDevice);
        addDevice.setOnClickListener(new AddDeviceOnClickListener());


private class AddDeviceOnClickListener implements View.OnClickListener 
        @Override
        public void onClick(View v) 
        // Launch the Activity to have the user enable Device Admin
                Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
                intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdmin);
                intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "EXPLANATION");
                startActivityForResult(intent, REQUEST_CODE_ENABLE_ADMIN);

我的设备管理员接收器:

import android.app.admin.DeviceAdminReceiver;
import android.content.Context;
import android.content.Intent;

public class AmayalockAdminReceiver extends DeviceAdminReceiver 

    @Override
    public void onEnabled(Context context, Intent intent) 

    

    @Override
    public CharSequence onDisableRequested(Context context, Intent intent) 
        return "";
    

    @Override
    public void onDisabled(Context context, Intent intent) 
        // Inform parent of app being disabled.
    

我正在跟随this Android tutorial 到达我现在所在的位置。

有什么想法吗?

【问题讨论】:

您确定您还不是管理员吗?如果您已经是管理员,我不知道ACTION_ADD_DEVICE_ADMIN 会做什么,但我可以看到它可能刚刚完成。 This sample app of mine 具有与您相同的基本功能,并且在我尝试过的任何地方都可以使用,即使在模拟器上也是如此。不过,就我而言,我会检查我是否是活跃的管理员,如果不是,则只调用ACTION_ADD_DEVICE_ADMIN 如果我是管理员,我的应用会显示在设置 > 安全 > 设备管理员下吗?如果是这样,它不存在。我还添加了这段代码:if (mDPM.isAdminActive(mDeviceAdmin)) Log.d(DEBUG_TAG, "I AM AN ADMIN"); 在我的意图创建之前,但日志中没有出现任何内容。 “如果我是管理员,我的应用会显示在设置 > 安全 > 设备管理员下吗?” -- 如果您已安装并且在清单中有适当的东西,您应该出现在那里,只是未选中。如果您被选中,那么您就是活跃的管理员。顺便说一句,在我之前的评论中,我链接到了一系列项目; this is the actual project 我指的是。 感谢@CommonsWare,在将您的清单与我的清单进行比较后,我注意到我在接收器的元数据标签中放置了android:name="android.app.device.admin" 而不是device_admin。重新运行应用程序并出现对话框。 你知道,我看了你的清单几次,因为感觉问题就在那里,但我也错过了。很高兴你抓住了它! 【参考方案1】:

原来在 AndroidManifest 文件中,我将 android:name="android.app.device.admin" 而不是 device_admin 放在了接收者的元数据标签中。

【讨论】:

这是您所做的唯一更改吗?我遇到了同样的问题,并且和你有类似的设置。我仍然无法从意图中弹出管理对话框 你能分享你的代码吗?我也面临同样的问题。 我也有同样的问题,我有正确的元标记。 是的,我也是同样的问题。对话框未显示。

以上是关于“启用设备管理员”对话框未显示的主要内容,如果未能解决你的问题,请参考以下文章

响应式文件管理器缩略图未显示

响应式文件管理器未在 TinyMCE 上显示图像

打开CAD2016打开CAD显示安全系统(软件锁许可管理器)不起作用或未正确安装

SQL2008 对象资源管理器 无法显示

即时运行后未显示设备选择器对话框

RequestPermissions 未显示对话框