文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

android权限级别探索(三),设置 DeviceOwner及api收集

2022-06-06 14:12

关注

一、准备工作 配置DeviceAdmin

配置DeviceAdmin可参考 android权限级别探索(二),设备管理器开启和使用及常见api,创建DeviceReceiver继承DeviceAdminReceiver,并在AndroidManifest中注册,完成两步即可。无需将应用勾选为设备管理器,获取到deviceowner权限后会自动勾选。

二、获取DeviceOwner权限

Google没有提供类似获取设备管理器权限那样的api,所以个人设备的deviceowner权限一般是通过adb shell命令赋予的,而一些大公司是采用批量订购设备,定制room的方式获取DeviceOwner权限。
获取deviceowner的adb命令:

adb shell dpm set-device-owner com.example.myapplication/com.example.myapplication.DeviceReceiver

其中com.example.myapplication是我demo的包名。com.example.myapplication.DeviceReceiver是我继承DeviceAdminReceiver的广播接收者的类名。
一般设置成功,会返回
“Success: Device owner set to package com.example.myapplication
Active admin set to component {com.example.myapplication/com.example.myapplication.DeviceReceiver}”

三、api收集(精华)

设置decviceowner很简单,真正开发中难的是如何在种类繁多的api中找到自己想要的。
google提供了官方文档(点击查询google提供的所有api),但是其中包含了大量的无效的,过时的,不适用国内厂商设备的(尤其是华为)。以下列出api不保证所有机型可用
setCameraDisabled(boolean disable) 举例如何禁用相机:

	DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
    ComponentName componentName = new ComponentName(context, DeviceReceiver.class);
    dpm.setCameraDisabled(componentName , true);
接口名 返回类型 功能 备注
setCameraDisabled (ComponentName admin, boolean disabled) void 禁用相机 获取设备管理器就可以调用
isDeviceOwnerApp(String packageName) boolean 是否有deviceowner权限 true 是
reboot (ComponentName admin) void 重启
setPackagesSuspended (ComponentName admin, String[] packageNames, boolean suspended) String[] 暂停应用 API >=24 可以找到应用图标,但应用不能使用
setApplicationHidden (ComponentName admin, String packageName, boolean hidden) boolean 隐藏应用 应用图标消失,且应用不可用
context.getPackageManager().getInstalledPackages
(PackageManager.MATCH_UNINSTALLED_PACKAGES);
可查询所有应用包括Hidden
isApplicationHidden (ComponentName admin, String packageName) boolean 应用是否隐藏
setStatusBarDisabled (ComponentName admin, boolean disabled) boolean 禁用状态栏
setScreenCaptureDisabled (ComponentName admin, boolean disabled) void 禁止截屏
setAutoTimeRequired (ComponentName admin, boolean required) void 禁止修改时间 false:禁止
setLockTaskPackages (ComponentName admin, String[] packages) void 锁定界面
setAlwaysOnVpnPackage (ComponentName admin, String vpnPackage, boolean lockdownEnabled) void 设置始终连接vpn 重启后会自动连接(自启动?),但vpn可以手动关闭
getWifiMacAddress (ComponentName admin) string wifi mac 地址 测试有几款android8.0无法获取
switchUser (ComponentName admin, UserHandle userHandle) boolean 切换用户
removeUser (ComponentName admin, UserHandle userHandle) boolean 删除用户 详见
createAndManageUser (ComponentName admin, String name, ComponentName profileOwner, PersistableBundle adminExtras, int flags) boolean 创建用户
setDeviceOwnerLockScreenInfo (ComponentName admin, CharSequence info) boolean 锁屏界面提示
setPermissionGrantState (ComponentName admin, String packageName, String permission, int grantState) boolean 通过包名设置权限 好像不太好用
setPermissionPolicy (ComponentName admin, int policy) void 自动授予权限 好像不太好用
setUninstallBlocked (ComponentName admin, String packageName, boolean uninstallBlocked) void 防卸 实际上获得deviceowner就已经防卸载了。。。或许可以给其他应用用?
setMasterVolumeMuted (ComponentName admin, boolean on) void 静音
setPermittedInputMethods (ComponentName admin, List packageNames) boolean 输入法 设置后只有允许的输入法才能用
setBluetoothContactSharingDisabled (ComponentName admin,boolean disabled) boolean 蓝牙是否允许访问联系人
setCrossProfileCallerIdDisabled (ComponentName admin, boolean disabled) boolean 禁用来电显示
setRequiredStrongAuthTimeout (ComponentName admin, long timeoutMs) boolean 超时时间
resetPassword (String password, int flags) boolean 设置密码
resetPasswordWithToken (ComponentName admin, String password, byte[] token, int flags) boolean 设置密码 从描述看,从android7.0后这个方法比resetPassword的级别更高
wipeData (int flags, CharSequence reason) void 恢复出厂(慎用)
setMaximumTimeToLock (ComponentName admin, long timeMs) void 最大待机时间
setSecureSetting (ComponentName admin, String setting, String value) void 设置安全属性 很多Settings.System.putInt(…)的命令可以用setSecureSetting 执行,但是实际效果感人,生不生效听天命
clearDeviceOwnerApp (String packageName) void 取消deviceowner权限 google并不推荐使用这个方法,
因为之前的设置仍然会生效。推荐使用恢复出厂
clearApplicationUserData void 通过包名清除数据 等同于ActivityManager.clearApplicationUserData()
clearProfileOwner (ComponentName admin) void 取消profileowner
removeActiveAdmin (ComponentName admin) void 取消设备管理器
addUserRestriction (ComponentName admin, String key) void 添加用户限制 key详见下表
clearUserRestriction(ComponentName admin, String key) void 清除用户限制 key详见下表
isSetUserRestriction(ComponentName admin, String key) void 通过key查询用户是否限制 key详见下表
getUserRestrictions(ComponentName admin) Bundle 查询用户限制 key详见下表

addUserRestriction方法可以添加用户限制,例如禁止恢复出厂,禁止使用wifi等。下表列举了一些key,更详细可参考google文档DevicePolicyManager的addUserRestriction方法。

key 功能 备注
DISALLOW_MODIFY_ACCOUNTS 禁止添加删除账户
DISALLOW_CONFIG_WIFI 禁用wifi
DISALLOW_CONFIG_LOCALE 禁止用户更改设备语言
DISALLOW_INSTALL_APPS 禁止安装应用
DISALLOW_UNINSTALL_APPS 禁止卸载应用
DISALLOW_SHARE_LOCATION 禁止用户打开位置共享
DISALLOW_AIRPLANE_MODE 禁止使用飞行模式
DISALLOW_CONFIG_BRIGHTNESS 禁止用户配置亮度
DISALLOW_CONFIG_SCREEN_TIMEOUT 禁止用户更改屏幕关闭超时
DISALLOW_INSTALL_UNKNOWN_SOURCES 禁止用户启用允许安装来自未知源的应用程序的“未知源”设置
DISALLOW_BLUETOOTH 禁用蓝牙
DISALLOW_INSTALL_UNKNOWN_SOURCES 禁止用户配置蓝牙。不限制打开或关闭蓝牙
DISALLOW_BLUETOOTH_SHARING 禁止蓝牙共享
DISALLOW_USB_FILE_TRANSFER 禁止usb传输
DISALLOW_REMOVE_USER 该用户是否可以删除其他用户
DISALLOW_DEBUGGING_FEATURES 禁用adb调试
DISALLOW_CONFIG_VPN 禁用vpn
DISALLOW_CONFIG_LOCATION 禁用定位gps
DISALLOW_CONFIG_LOCATION 不允许配置日期、时间和时区
DISALLOW_CONFIG_TETHERING 禁止配置便携式热点
DISALLOW_NETWORK_RESET 禁止重置网络设置
DISALLOW_FACTORY_RESET 禁用恢复出厂
DISALLOW_ADD_USER 禁止添加用户
ENSURE_VERIFY_APPS 禁止用户禁用应用程序验证
DISALLOW_CONFIG_CELL_BROADCASTS 禁止用户配置单元广播
DISALLOW_CONFIG_MOBILE_NETWORKS 禁止用户配置移动网络
DISALLOW_APPS_CONTROL 禁止修改应用:卸载、禁用、清缓存、清数据、强制停止 看上去应用范围很广,是否生效还需测试
DISALLOW_MOUNT_PHYSICAL_MEDIA 禁用外部媒体 例如SD卡等
DISALLOW_UNMUTE_MICROPHONE 麦克风静音
DISALLOW_ADJUST_VOLUME 静音
DISALLOW_OUTGOING_CALLS 禁止拨打电话(允许紧急呼叫)
DISALLOW_SMS 不允许用户发送或接收短信
DISALLOW_FUN 不允许用户玩 ?描述怪怪的,待测试实际效果
DISALLOW_CREATE_WINDOWS 禁止弹窗 以下类型禁止
TYPE_TOAST
TYPE_PHONE
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_SYSTEM_ERROR
TYPE_SYSTEM_OVERLAY
TYPE_APPLICATION_OVERLAY
DISALLOW_SYSTEM_ERROR_DIALOGS 不显示崩溃或无响应的错误对话框
DISALLOW_CROSS_PROFILE_COPY_PASTE 禁止复制粘贴
DISALLOW_OUTGOING_BEAM 禁用nfc
DISALLOW_SET_WALLPAPER 禁止设置墙纸
DISALLOW_SAFE_BOOT 禁用安全模式
DISALLOW_DATA_ROAMING 漫游时禁止使用流量
DISALLOW_SET_USER_ICON 禁止修改用户图标
ALLOW_PARENT_PROFILE_APP_LINKING 不允许通过web打开app action Intent.ACTION_VIEW
category Intent.CATEGORY_BROWSABLE
DISALLOW_AUTOFILL 不允许用户使用自动填充服务
DISALLOW_CONTENT_CAPTURE 不允许出于人工智能目的捕获用户屏幕的内容 国内没这个东西吧
DISALLOW_USER_SWITCH 禁止切换用户
DISALLOW_SHARE_INTO_MANAGED_PROFILE 禁止主用户共享文件给其他用户 profileowner可能会用到
DISALLOW_PRINTING 禁止用户打印
DISALLOW_CONFIG_PRIVATE_DNS 禁止用户修改专用DNS
DISALLOW_CONFIG_TETHERING 禁用wifi热点
DISALLOW_USB_FILE_TRANSFER 禁用usb传输

使用举例 DISALLOW_CONFIG_WIFI:

dpm.addUserRestriction(mAdminName, UserManager.DISALLOW_CONFIG_WIFI);
炭烤葫芦娃 原创文章 8获赞 3访问量 1867 关注 私信 展开阅读全文
作者:炭烤葫芦娃


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯