美文网首页
DeviceAdmin/ProfileOwner/DeviceO

DeviceAdmin/ProfileOwner/DeviceO

作者: 海内灬存知己 | 来源:发表于2020-09-11 15:06 被阅读0次

Android提供了三种设备管理方案,Device Administration(设备管理员), ProfileOwner(配置文件所有者)和 DeviceOwner(设备所有者)。这三种管理方案对应三种等级的管理权限,相对的,等级越高所拥有的管理权限越高,面临的风险也对大,所以,要将一个应用设置成为这些管理设备,也需要不同的权限等级。

1: 设置 Device Administration

要设置一个DeviceAdmin 所需要权限相对来说是最小的,Android系统提供了一种方案:

    DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
    mComponentName);
    intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "提示文字");
    startActivityForResult(intent, 1);

该方法将激活DeviceAdmin的动作委托给系统Settings,有界面提示用户是否激活/停用/卸载一个设备管理应用。这种方案其实是一种动态权限,由用户决定是否启用设备管理。在特殊行业中,有些操作不应该让用户决定,由管理平台在后台一键设置。

2: 设置 ProfileOwner

system进程的系统应用,有设置ProfileOwner程序的能力,不细说了。

3:设置 DeviceOwner

DeviceOwner可以使一个第三方应用程序拥有系统最高管理权限,面临的风险也是最大的。 要设置一个DeviceOwner程序, 需要很高的权限,系统提供两种方式:

adb shell

adb shell dpm set-device-owner 1 / 2
1:项目包名
2:DeviceReceiver的包名.DeviceReceiver
比如:
adb shell dpm set-device-owner com.abc.mdm / com.abc.mdm.model.receiver.DeviceReceiver

DeviceReceiver又是什么呢?

DeviceReceiver是一个继承自DeviceAdminReceiver的Receiver用于控制静默安装,关闭摄像头等功能。

例如:

DevicePolicyManager mDPM =(DevicePolicyManager)GlobalApp.getContext().getApplicationContext().getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName mCN = new ComponentName(GlobalApp.getInstance().getApplicationContext(), DeviceReceiver.class);
if(mDPM.isAdminActive(mCN)){
   mDPM.setCameraDisabled(mCN, true);
  }

这种方式我验证过是没有问题的,还有一种NFC的方式就不介绍了。

android10.0回收了DeviceAdmin控制摄像头的权限,提示:java.lang.SecurityException: Admin ComponentInfo{com.gsc.mdm/com.gsc.mdm.model.receiver.DeviceReceiver} is not a device
owner or profile owner, so may not use policy: disable-camera

只有设置了mdm为DeviceOwner,才可以继续控制摄像头的启用,禁用,这是我的一点总结,希望帮助到更多的人。

相关文章

网友评论

      本文标题:DeviceAdmin/ProfileOwner/DeviceO

      本文链接:https://www.haomeiwen.com/subject/bgifahtx.html