实战:用锁屏密码策略保护敏感内容)
文档教程移动开发【免费下载链接】android-training-course-in-chineseAndroid官方培训课程中文版项目地址https://gitcode.com/gh_mirrors/an/android-training-course-in-chinese点击查看免费下载本指南基于《Android 官方培训课程中文版》android-training-course-in-chinese中的 使用设备管理策略增强安全性 一文展开。该仓库完整收录了 Android 官方培训课程的翻译版本本文以其中的设备管理策略教程为骨架结合仓库中与之配套的企业级设备管理章节如 创建设备策略控制器系统讲解如何利用 Android 设备管理 API 实现系统级的设备安全策略。导读自 Android 2.2API Level 8起Android 平台通过设备管理 APIDevice Administration API提供了系统级的设备管理能力。本教程将教你如何使用设备管理策略创建安全敏感型应用——例如在向用户展示受保护内容之前强制确保设备已设置足够强度的锁屏密码。读完本文你将掌握完整闭环定义并声明策略 → 注册设备管理接收端 → 引导用户激活设备管理员权限 → 通过DevicePolicyManager实施策略并校验密码强度最终构建出能抵御弱锁屏密码风险的实战方案。设备管理 API 与策略体系概览设备管理 API 的核心入口是DevicePolicyManager类它由系统服务Context.DEVICE_POLICY_SERVICE提供。应用要管理设备必须先成为一个设备管理员Device Administrator而成为管理员的前提是用户显式授权——这是 Android 安全模型的关键约束任何设备策略的强制执行都必须经过用户知情同意。策略的整个生命周期可以分为四个阶段声明在res/xml/device_admin.xml中声明应用支持的策略集并在 AndroidManifest 中通过receiver组件引用注册创建继承自DeviceAdminReceiver的广播接收端接收策略相关事件激活向系统发起激活请求ACTION_ADD_DEVICE_ADMIN用户在系统界面确认后应用获得管理员权限实施激活后通过DevicePolicyManager的系列setXxx()方法写入密码、加密等策略并配合isActivePasswordSufficient()校验设备现状。仓库中配套的企业级教程 创建设备策略控制器 明确指出设备策略控制器Device Policy Controller正是构建在设备管理应用现有模型之上的核心步骤就是创建DeviceAdminReceiver的子类。这说明本文所讲的 API 不仅是单机应用的安全加固手段也是 Android for Work 企业移动管理EMM方案的底层基础。定义并声明你的策略首先你需要定义多种在功能层面提供支持的策略。这些策略可以包括屏幕锁密码强度、密码过期时间、设备加密等维度。每个声明的策略都对应DevicePolicyManager中相关的策略方法——例如定义最小密码长度对应setPasswordMinimumLength()最少大写字母字符数对应setPasswordMinimumUpperCase()。在 res/xml/device_admin.xml 中声明策略集策略集必须写在res/xml/device_admin.xml中应用将通过它强制实施策略。以下代码片段声明了密码限制limit-password策略device-admin xmlns:androidhttp://schemas.android.com/apk/res/android uses-policies limit-password / /uses-policies /device-adminuses-policies元素内部可以声明多种策略常见包括策略元素含义对应 DevicePolicyManager 方法limit-password /限制锁屏密码强度setPasswordQuality()、setPasswordMinimumLength()等watch-login /监控登录尝试次数setMaximumFailedPasswordsForWipe()reset-password /重置锁屏密码resetPassword()force-lock /强制锁定设备lockNow()wipe-data /擦除设备全部数据wipeData()expire-password /密码有效期限制setPasswordExpirationTimeout()encrypted-storage /强制启用加密存储setStorageEncryption()disable-camera /禁用摄像头setCameraDisabled()关键安全约束每个声明的策略对应DevicePolicyManager中相关的设备策略方法。如果一个应用尝试调用 XML 中没有对应策略的方法程序在运行时将抛出SecurityException异常。因此XML 声明与应用实际调用的策略方法必须严格一一对应。如果应用还要管理其他策略如强制锁屏force-lock则需在 XML 中补充相应声明——这些额外权限会在激活过程中一并展示给用户。在 AndroidManifest.xml 中引用策略声明仅仅有 XML 文件还不够Android 系统需要通过 manifest 中的广播接收端receiver找到这份声明。在 AndroidManifest 中引用 XML 策略声明的方式如下receiver android:name.Policy$PolicyAdmin android:permissionandroid.permission.BIND_DEVICE_ADMIN meta-data android:nameandroid.app.device_admin android:resourcexml/device_admin / intent-filter action android:nameandroid.app.action.DEVICE_ADMIN_ENABLED / /intent-filter /receiver这段声明包含三个要点android:permissionandroid.permission.BIND_DEVICE_ADMIN这是一个签名级系统权限确保只有系统能够绑定该接收端防止第三方应用冒充设备管理员meta-data通过android.app.device_admin键指向xml/device_admin资源将 XML 中声明的策略集绑定到该接收端intent-filter注册android.app.action.DEVICE_ADMIN_ENABLED动作使接收端能够响应设备管理员被启用的事件。创建一个设备管理接收端DeviceAdminReceiver设备管理接收端需要继承android.app.admin.DeviceAdminReceiver类。它是一个广播接收端broadcast receiver可以接收到与你声明的策略有关的事件通知并允许应用有选择地重写回调函数。核心回调与业务场景实际开发中你应当实现与应用业务逻辑相关的策略回调。例如onEnabled()设备管理员权限被激活时回调可在此初始化策略配置onDisabled()设备管理员权限被用户禁用时回调——此时已配置好的策略会从共享偏好设置SharedPreferences中擦除应用应当做好状态清理onPasswordChanged()/onPasswordFailed()密码变更/失败事件onPasswordExpiring()密码即将过期可借此提醒用户更换。借助这些回调应用可以主动降低安全风险例如删除设备上的敏感数据、禁用远程同步、向管理员发送通知提醒等。在 manifest 中注册接收端为了让广播接收端正常工作务必在 AndroidManifest 中注册如下内容与上节引用策略声明的配置一致即接收端本身、元数据与 intent-filter 三者缺一不可receiver android:name.Policy$PolicyAdmin android:permissionandroid.permission.BIND_DEVICE_ADMIN meta-data android:nameandroid.app.device_admin android:resourcexml/device_admin / intent-filter action android:nameandroid.app.action.DEVICE_ADMIN_ENABLED / /intent-filter /receiver激活设备管理器在执行任何策略之前用户必须手动将程序激活为设备管理员。应用无法静默获取该权限这是 Android 设备管理机制的根本设计。下面这段代码展示了如何触发系统设置界面让用户为你的程序激活权限if (!mPolicy.isAdminActive()) { Intent activateDeviceAdminIntent new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_DEVICE_ADMIN, mPolicy.getPolicyAdmin()); // 建议附带可选的说明文本向用户解释应用为何要申请设备管理员权限。 // 系统会在激活界面显示这段说明文字。 activateDeviceAdminIntent.putExtra( DevicePolicyManager.EXTRA_ADD_EXPLANATION, getResources().getString(R.string.device_admin_activation_message)); startActivityForResult(activateDeviceAdminIntent, REQ_ACTIVATE_DEVICE_ADMIN); }其中两个putExtra参数含义如下EXTRA_DEVICE_ADMIN必需的组件名ComponentName指明哪个接收端要成为设备管理员EXTRA_ADD_EXPLANATION可选说明文本。良好的实践是向用户解释为什么应用需要申请设备管理员权限系统会在激活屏幕上展示这段文字帮助用户做出知情决策。激活界面会列出应用声明的全部策略即res/xml/device_admin.xml中的uses-policies列表让用户在授权前清楚知道应用将获得哪些管理能力。如果用户点击Activate程序就获取设备管理员权限并可以开始配置和执行策略。处理用户拒绝激活的情况程序必须做好用户放弃激活的准备——例如用户点击了取消按钮、返回键或 HOME 键。因此有必要在策略设置界面的onResume()方法中加入重新评估逻辑每次界面恢复时都检查isAdminActive()状态若发现尚未激活则将设备管理激活选项重新展示给用户保证流程可重试、可闭环。实施设备策略控制设备管理权限成功激活后程序就可以根据请求的策略来配置DevicePolicyManager。获取 DevicePolicyManager 并设置策略DevicePolicyManager mDPM (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); ComponentName mPolicyAdmin new ComponentName(context, PolicyAdmin.class); ... mDPM.setPasswordQuality(mPolicyAdmin, PASSWORD_QUALITY_VALUES[mPasswordQuality]); mDPM.setPasswordMinimumLength(mPolicyAdmin, mPasswordLength); if (Build.VERSION.SDK_INT Build.VERSION_CODES.HONEYCOMB) { mDPM.setPasswordMinimumUpperCase(mPolicyAdmin, mPasswordMinUpperCase); }平台版本检测重要新策略会被添加到每个版本的 Android 中所以你需要在程序中做好平台版本检测以便新策略能兼容老版本平台。例如setPasswordMinimumUpperCase()密码中最少大写字母数仅在 API Level 11Honeycomb及以上才受支持更多字符类策略小写字母、数字、符号也有各自的引入版本。上面的代码演示了如何在运行时使用Build.VERSION.SDK_INT Build.VERSION_CODES.HONEYCOMB进行版本分支从而在低版本设备上优雅降级、在高版本设备上启用完整策略。除字符类策略外密码质量常量PASSWORD_QUALITY_VALUES也是分级递进的常用取值包括密码质量常量说明允许的锁屏机制PASSWORD_QUALITY_UNSPECIFIED未指定任意含无密码PASSWORD_QUALITY_SOMETHING需要某种凭据图案/PIN/密码PASSWORD_QUALITY_NUMERIC纯数字PIN 或密码PASSWORD_QUALITY_ALPHABETIC字母密码PASSWORD_QUALITY_ALPHANUMERIC字母数字密码PASSWORD_QUALITY_COMPLEX复杂密码API 11密码校验当前密码并引导用户设置设置完策略后需要校验设备当前的锁屏密码是否满足要求。当程序无法访问正确锁屏密码信息时可以通过设备策略管理器 API 判断当前密码是否适用于请求的策略如果当前锁屏密码满足策略设备管理 API 不会采取纠正措施如果不满足明确地启动设置程序中的系统密码更改界面是应用程序的责任。if (!mDPM.isActivePasswordSufficient()) { ... // 触发设置中的密码更改界面 Intent intent new Intent(DevicePolicyManager.ACTION_SET_NEW_PASSWORD); startActivity(intent); }ACTION_SET_NEW_PASSWORD会直接跳转到系统设置中的密码设置界面。当密码策略配置好后所有比已定义策略弱的密码都会被禁用。例如若配置了密码级别为Numeric数字用户便只能选择 PIN 码数字或密码字母数字而图案与无这两种较弱机制将被禁用。完整访问控制流程保护受保护内容综合以上所有步骤一个典型的安全敏感型应用会在用户尝试访问受保护内容时执行如下三段式判断if (!mDPM.isAdminActive(..)) { // 激活设备管理员 ... } else if (!mDPM.isActivePasswordSufficient()) { // 启动设置中的密码设置界面 ... } else { // 授予对受保护内容的访问权限 ... startActivity(new Intent(context, SecureActivity.class)); }这段代码构成了完整的访问控制闭环未激活管理员→ 引导用户走ACTION_ADD_DEVICE_ADMIN激活流程已激活但密码不达标→ 通过ACTION_SET_NEW_PASSWORD强制用户设置符合策略的锁屏密码已激活且密码达标→ 设备处于被保护状态应用才放行允许用户进入受保护内容如SecureActivity。与仓库其他章节的衔接本教程处于仓库 Android安全与隐私 体系下的企业级开发脉络中。如需进一步深入可继续阅读仓库内的创建设备策略控制器讲解如何基于DeviceAdminReceiver构建 Android for Work 场景下的设备策略控制器包含 Managed Profile工作资料的创建与设备策略设置是本文内容的进阶延伸工作资料支持Work Policy Controller 与 应用限制App Restrictions分别覆盖 COSU 锁定制方案与app restrictions机制与设备策略共同构成企业级设备管控矩阵。小结通过本文你已经掌握了 Android 设备管理 API 的完整实战路径在res/xml/device_admin.xml中声明策略集并在 manifest 中通过带BIND_DEVICE_ADMIN权限的 receiver 引用继承DeviceAdminReceiver创建设备管理接收端处理启用/禁用/密码变更等事件用ACTION_ADD_DEVICE_ADMINEXTRA_ADD_EXPLANATION引导用户激活设备管理员权限并妥善处理用户拒绝的情况激活后通过DevicePolicyManager实施策略注意用Build.VERSION.SDK_INT做版本分支以兼容旧平台利用isActivePasswordSufficient()ACTION_SET_NEW_PASSWORD校验并强制达标密码最后才放行受保护内容。这套机制让应用能够在展示敏感数据之前强制设备达到安全基线是 Android 上实现系统级安全策略的标准做法也是后续企业级 EMM 方案如 Android for Work的底层能力基石。赞分享文档教程移动开发【免费下载链接】android-training-course-in-chineseAndroid官方培训课程中文版项目地址https://gitcode.com/gh_mirrors/an/android-training-course-in-chinese点击查看免费下载相关推荐Android 设备管理策略Device Admin API实战用锁屏密码策略保护敏感内容Android 设备管理策略Device Admin API实战用锁屏密码策略保护敏感内容 导读 本文基于 Android 官方培训课程中文版中《使用设备文档教程移动开发三步解放小爱音箱XiaoMusic 免费听全网音乐的完整配置指南三步解放小爱音箱XiaoMusic 免费听全网音乐的完整配置指南 周末早晨你对音箱说小爱同学播放周杰伦的《晴天》得到的回应却是抱歉这首歌需要开通后端智能硬件音视频wechat-dump实战如何将微信聊天记录导出为HTML文件wechat dump实战如何将微信聊天记录导出为HTML文件 wechat dump是一款强大的开源工具专门用于从Android设备中分析和导出微信聊天记即时通讯数据分析数据可视化逆向工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考