我有一个设备管理器应用程序,我正在尝试使用自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
知道如何解决这个问题吗?
如果需要任何许可,请指出它是什么。
答案 0 :(得分:4)
您的应用需要成为设备所有者或个人资料所有者。对一台设备执行此操作的最简单方法是使用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
是您的应用包,DeviceAdminRcvr
是您的包中的DeviceAdminReceiver
。请注意,除非您从设备中删除了所有帐户(java.lang.IllegalStateException
> Settings
),否则您将获得Accounts
。
另一种方法是创建NFC配置应用程序:
https://source.android.com/devices/tech/admin/provision.html
答案 1 :(得分: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();
}
答案 2 :(得分:0)
您是否正确注册为DeviceAdminReceiver
?
根据Android文档HERE,呼叫设备管理员必须是设备或个人资料所有者。如果不是,则会抛出安全异常。
从日志中可以清楚地看到你没有自己的个人资料!