Android 安卓:设备管理员:从服务启动设备管理员

Android 安卓:设备管理员:从服务启动设备管理员,android,device-admin,Android,Device Admin,我无法获取允许用户授予应用程序作为设备管理员工作权限的活动 我的代码如下 ComponentName comp = new ComponentName(this, CustomReceiver.class); Intent i = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); i.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, comp); i.putExtra(Device

我无法获取允许用户授予应用程序作为设备管理员工作权限的活动

我的代码如下

ComponentName comp = new ComponentName(this, CustomReceiver.class);

Intent i = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);

i.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, comp);
i.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "Explanation");

startActivity(i);

应用程序不会崩溃/报告异常。我会做错什么呢?

像这样的事情就可以了

if (!mPolicy.isAdminActive()) {

    Intent activateDeviceAdminIntent =
        new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);

    activateDeviceAdminIntent.putExtra(
        DevicePolicyManager.EXTRA_DEVICE_ADMIN,
        mPolicy.getPolicyAdmin());

    // It is good practice to include the optional explanation text to
    // explain to user why the application is requesting to be a device
    // administrator. The system will display this message on the activation
    // screen.
    activateDeviceAdminIntent.putExtra(
        DevicePolicyManager.EXTRA_ADD_EXPLANATION,
        getResources().getString(R.string.device_admin_activation_message));

    startActivityForResult(activateDeviceAdminIntent,
        REQ_ACTIVATE_DEVICE_ADMIN);
}
也许你没有考虑

mPolicy.getPolicyAdmin()

这里有一个关于如何做到这一点的清晰示例(官方文件和一些上下文)


您好首先非常感谢您的回复。什么是“getPolicyAdmin”的成员?我似乎找不到它是DevicePolicyManager的方法?不,CustomReceiver是引用deviceadmin类的组件吗?意思是扩展DeviceAdminReceiver的组件?你介意和我分享一下这段代码吗?只需编辑上面的答案就可以了。当然,我会查看我的示例,但是如果你没有检查链接,你应该可以从这里找到答案。谢谢。。。我来看看!有点晚了,但是…您需要按照nitinreddy的建议使用startActivityForResult(),但您不能从服务中执行此操作。要从服务执行此操作,最好启动一个透明活动,从该活动请求管理员权限,然后完成()该活动。这可能会帮助你。。。
//class that implements DeviceAdminReceiver, defined in the Manifest 
ComponentName deviceAdminCN = new ComponentName(context, DeviceAdminReceiverImpl.class) 

...

Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, deviceAdminCN);
intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "your explanation for the user here");
startActivityForResult(intent, YOUR_REQUEST_CODE);