安卓安全异常:管理员不拥有该个人资料

10

我有一个设备管理应用程序,我正在尝试使用自 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

你有什么想法可以解决这个问题吗?

如果需要任何权限,您能否指出是什么权限。

3个回答

12

您的应用程序需要成为设备所有者或配置文件所有者。 对于一个设备,最简单的方法是使用如下 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

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

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


我们能以编程方式执行“dpm set-device-owner”命令吗? - Dhruv Patel
@Dhruv 不可以。你只能通过adb(无论是通过USB还是NFC)来管理设备。 - pmargreff
这个命令在安卓10上还能用吗,还是需要EMM账户! - makri aymen abderraouf

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();
}

-1

您是否正确地注册为DeviceAdminReceiver

根据Android文档这里,调用设备管理员必须是设备或配置文件所有者。如果不是,则会抛出安全异常。

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


1
@AshokBijoyDebnath 你有没有找到这个答案?如何拥有该个人资料? - portfoliobuilder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接