“启用设备管理员”对话框未显示
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
放在了接收者的元数据标签中。
【讨论】:
这是您所做的唯一更改吗?我遇到了同样的问题,并且和你有类似的设置。我仍然无法从意图中弹出管理对话框 你能分享你的代码吗?我也面临同样的问题。 我也有同样的问题,我有正确的元标记。 是的,我也是同样的问题。对话框未显示。以上是关于“启用设备管理员”对话框未显示的主要内容,如果未能解决你的问题,请参考以下文章