避免SecurityException,因为"没有活动的管理员拥有"

Vil*_*usK 8 android securityexception admin

如何避免这种例外

E/AndroidRuntime(26113): Caused by: java.lang.SecurityException: No active admin owned by uid XXXX for policy #3
Run Code Online (Sandbox Code Playgroud)

在调用时:

public static void lockScreen(Context context) {
    Log.d(TAG, "lockScreen");
    ComponentName mDeviceAdminSample = null;
    DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
    dpm.lockNow();
}
Run Code Online (Sandbox Code Playgroud)

Vad*_*imK 7

我遇到了与 OP 相同的错误。由于只有其他答案的组合对我有帮助,以下是我使 OP 代码示例工作的演练:

  1. 确保您已创建设备管理接收器和 xml 策略文件,如https://developer.android.com/guide/topics/admin/device-admin.html 中所述
  2. 将带有 xml 策略文件引用的管理接收器添加到 Manifest。
  3. 安装您的应用
  4. 在设置>安全>设备管理员>“您的应用程序管理员接收器标签值”中启用应用程序作为管理员
  5. 或以编程方式执行 [4]

    mDeviceAdminSample = new ComponentName(this,DeviceAdminSampleReceiver.class);
    Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mDeviceAdminSample);
    currActivity.startActivityForResult(intent, 0);
    
    Run Code Online (Sandbox Code Playgroud)


Nik*_*kov 5

您必须按照参考文档中的说明安装并启用设备管理员:http : //developer.android.com/guide/topics/admin/device-admin.html