9

我有一个设备管理器应用程序,我正在尝试使用自 API 21 以来可用的 DevicePolicyManager 类的 setScreenCaptureDisabled(..) 函数。

DevicePolicyManager pManager = (android.app.admin.DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
pManager.setScreenCaptureDisabled(admin.getReceiverName(), true);

我收到以下错误:

03-30 13:50:24.623: E/AndroidRuntime(11564): 
java.lang.SecurityException: Admin 
ComponentInfo{com.example.xxv/com.example.xxv.DeviceAdminReceiver} 
does not own the profile

知道如何解决这个问题吗?

如果需要任何许可,您能否指出它是什么。

4

3 回答 3

10

您的应用需要成为设备所有者或个人资料所有者。对一台设备执行此操作的最简单方法是使用 adb,如下所示:

http://florent-dupont.blogspot.co.uk/2015/01/android-shell-command-dpm-device-policy.html

基本上来自命令提示符

adb shell 
dpm set-device-owner com.foo.deviceowner/.DeviceAdminRcvr

com.foo.deviceowner您的应用程序包在哪里,并且在DeviceAdminRcvrDeviceAdminReceiver的包中。请注意,java.lang.IllegalStateException除非您已从设备中删除所有帐户 ( Settings> Accounts),否则您将获得一个。

另一种方法是创建一个 NFC 配置应用程序:

https://source.android.com/devices/tech/admin/provision.html

于 2017-02-08T17:06:38.190 回答
1

我认为您需要使用此代码设置配置文件

Intent intent = new Intent(**ACTION_PROVISION_MANAGED_PROFILE**);
intent.putExtra(EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME,
activity.getApplicationContext().getPackageName());
if (intent.resolveActivity(activity.getPackageManager()) != null) {
    startActivityForResult(intent, REQUEST_PROVISION_MANAGED_PROFILE);
    activity.finish();
} else {
    Toast.makeText(activity, "Stopping.",Toast.LENGTH_SHORT).show();
}
于 2015-07-07T22:59:35.743 回答
-1

您是否正确注册为DeviceAdminReceiver

根据此处的 Android 文档,调用设备管理员必须是设备或配置文件所有者。如果不是,则会引发安全异常。

从日志中可以清楚地看出您不拥有该配置文件!

于 2015-04-25T18:39:49.100 回答