在Android开发中权限是应用获取系统资源、用户隐私数据的唯一合法途径也是保障用户隐私安全、应用合规上线的核心环节。从早期安装时一次性授权到如今运行时动态申请、细粒度权限管控Android系统历经多次迭代权限机制不断收紧对开发者的适配要求也越来越高。本文将全面梳理Android权限体系详细说明每类常用权限的核心用途拆解不同Android版本的权限机制差异同时给出完整的权限申请实战代码与适配方案帮助开发者完美适配全版本设备避免因权限问题导致应用崩溃、功能异常或应用商店下架。一、Android权限基础分类Android权限按照风险等级、授权方式主要分为普通权限Normal Permissions和危险权限Dangerous Permissions两大类二者的授权方式、申请逻辑完全不同这是理解权限机制的核心前提。1.1 普通权限普通权限风险极低不涉及用户隐私数据与核心系统资源仅涉及应用沙盒外的轻量级操作对用户隐私和系统安全无威胁。核心特点只需在AndroidManifest.xml中静态声明系统会在应用安装时自动授权无需用户手动同意也无需运行时动态申请。常见普通权限及用途android.permission.ACCESS_NETWORK_STATE获取网络连接状态判断Wi-Fi、移动数据是否可用android.permission.ACCESS_WIFI_STATE获取Wi-Fi连接状态用于网络相关功能判断android.permission.INTERNET允许应用访问网络是联网应用的基础权限android.permission.CHANGE_WIFI_STATE修改Wi-Fi连接状态如开启、关闭Wi-Fiandroid.permission.SET_WALLPAPER设置手机壁纸属于桌面相关轻量级操作android.permission.VIBRATE控制手机震动用于消息提醒、交互反馈android.permission.BLUETOOTHAndroid 11及以下基础蓝牙操作不涉及扫描与连接1.2 危险权限危险权限涉及用户隐私数据通讯录、短信、位置、核心设备功能相机、麦克风、系统敏感操作直接关系用户隐私安全属于高风险权限。核心特点Android 6.0API 23及以上版本必须在运行时动态申请用户手动同意后才可使用仅在清单文件声明不做动态申请调用相关功能会直接崩溃。危险权限按权限组管理同一组内一个权限授权组内其他权限自动授权。常见危险权限及核心用途按权限组分类1.2.1 日历组 CALENDARandroid.permission.READ_CALENDAR读取系统日历日程、提醒事项android.permission.WRITE_CALENDAR添加、修改、删除系统日历日程1.2.2 相机组 CAMERAandroid.permission.CAMERA调用相机拍照、录制视频、扫码是相机相关功能必备权限1.2.3 通讯录组 CONTACTSandroid.permission.READ_CONTACTS读取手机通讯录联系人姓名、手机号、邮箱android.permission.WRITE_CONTACTS添加、修改、删除通讯录联系人android.permission.GET_ACCOUNTS获取手机上已登录的账号信息如谷歌账号1.2.4 位置组 LOCATIONandroid.permission.ACCESS_FINE_LOCATION精确定位获取GPS精准位置适用于导航、精准位置服务android.permission.ACCESS_COARSE_LOCATION粗略定位通过基站、Wi-Fi获取大致位置精度低于GPSandroid.permission.ACCESS_BACKGROUND_LOCATIONAndroid 10后台定位应用退至后台时仍可获取位置1.2.5 麦克风组 MICROPHONEandroid.permission.RECORD_AUDIO录制音频适用于语音聊天、录音、语音识别、直播功能1.2.6 电话组 PHONEandroid.permission.READ_PHONE_STATE读取手机状态包括IMEI、IMSI、手机号、通话状态android.permission.CALL_PHONE直接拨打电话无需跳转到系统拨号界面android.permission.READ_CALL_LOG读取通话记录包括来电、去电、未接记录android.permission.WRITE_CALL_LOG添加、修改、删除通话记录android.permission.USE_SIP使用SIP网络电话服务1.2.7 传感器组 SENSORSandroid.permission.BODY_SENSORSAndroid 6.0访问身体传感器如心率、步数传感器适用于健康类应用1.2.8 短信组 SMSandroid.permission.SEND_SMS发送短信android.permission.READ_SMS读取手机短信内容android.permission.RECEIVE_SMS接收新短信android.permission.RECEIVE_WAP_PUSH接收WAP推送消息android.permission.RECEIVE_MMS接收彩信1.2.9 存储组 STORAGEAndroid 12及以下android.permission.READ_EXTERNAL_STORAGE读取外部存储SD卡文件如图片、视频、文档android.permission.WRITE_EXTERNAL_STORAGE写入外部存储文件Android 10已逐步废弃1.2.10 细化媒体权限Android 13android.permission.READ_MEDIA_IMAGES读取设备图片替代原存储读权限android.permission.READ_MEDIA_VIDEO读取设备视频android.permission.READ_MEDIA_AUDIO读取设备音频文件1.2.11 通知权限特殊权限android.permission.POST_NOTIFICATIONSAndroid 13发送通知栏消息Android 13以下无需单独申请二、Android各版本权限机制核心差异Android权限机制的重大变革始于6.0后续每个大版本都针对隐私安全收紧权限不同版本的授权方式、权限范围、适配要求差异极大这是权限适配的核心难点下面按版本逐一梳理关键变化。2.1 Android 5.1及以下API ≤22安装时一次性授权这是最早期的权限模式无运行时申请概念。所有权限包括危险权限只需在清单文件声明用户安装应用时系统会列出所有权限用户必须全部同意才能安装安装后权限默认永久授权无法单独撤销除非卸载应用。适配要点只需静态声明权限无需编写动态申请代码兼容性高但隐私安全性极差目前该版本设备占比极低。2.2 Android 6.0-9.0API 23-28运行时权限正式上线Android 6.0棉花糖是权限机制的里程碑危险权限必须运行时动态申请普通权限仍自动授权。用户可在应用使用中单独授权/撤销危险权限无需卸载应用权限按组管理申请组内一个权限即可获取组内所有权限Android 8.0开始系统仅授予应用明确申请的权限不再自动授权同组未申请权限存储权限无限制可自由读写外部存储所有文件适配要点调用危险功能前必须先判断权限是否授权未授权则动态申请处理权限申请回调根据用户授权结果执行对应逻辑。2.3 Android 10-11API 29-30分区存储后台权限管控这一版本重点强化位置后台权限和存储权限管控隐私限制大幅升级分区存储强制生效废弃WRITE_EXTERNAL_STORAGE写入权限应用无法自由读写外部存储只能通过MediaStore访问媒体文件或通过SAF文件选择器访问用户指定文件彻底杜绝随意遍历手机文件后台定位独立权限新增ACCESS_BACKGROUND_LOCATION权限前台定位授权后需单独申请后台定位权限用户可选择“仅使用期间允许”拒绝后台定位权限授权选项优化新增“仅在使用期间允许”位置权限禁止应用后台随意获取位置适配要点停止使用WRITE_EXTERNAL_STORAGE适配分区存储后台定位需单独申请仅核心功能如持续导航才申请该权限。2.4 Android 12-13API 31-33细粒度权限通知权限独立媒体权限细化Android 13彻底废弃旧存储权限将媒体访问拆分为图片、视频、音频三个独立权限应用只能申请所需类型权限无法获取全部媒体文件通知权限动态化Android 13新增POST_NOTIFICATIONS通知权限需动态申请未授权则无法发送通知一次性授权相机、麦克风、位置权限用户可选择“仅此一次”授权应用关闭后权限自动回收蓝牙权限重构废弃旧蓝牙权限新增BLUETOOTH_SCAN、BLUETOOTH_CONNECT、BLUETOOTH_ADVERTISE需动态申请2.5 Android 14API 34权限使用透明化进一步强化权限使用透明度限制非必要权限申请后台位置、传感器权限管控更严格非核心功能无法获取权限申请需明确说明用途应用商店审核更严苛未使用的权限系统会自动回收保护用户隐私三、各版本权限适配核心总结Android版本API等级核心权限变化关键适配点5.1及以下≤22安装时一次性授权无动态申请仅静态声明无需动态代码6.0-9.023-28危险权限动态申请权限组管理运行时申请处理授权回调10-1129-30分区存储、后台定位独立权限适配分区存储单独申请后台定位12-1331-33媒体权限细化、通知权限动态化拆分媒体权限申请通知权限14≥34权限自动回收使用透明化仅申请必要权限说明权限用途四、Android权限申请完整实战流程4.1 第一步清单文件静态声明所有权限普通危险必须先在AndroidManifest.xml中声明动态申请前不声明会直接导致申请失败。示例适配Android 13!-- 普通权限 -- uses-permission android:nameandroid.permission.INTERNET / uses-permission android:nameandroid.permission.ACCESS_NETWORK_STATE / !-- 危险权限相机、录音 -- uses-permission android:nameandroid.permission.CAMERA / uses-permission android:nameandroid.permission.RECORD_AUDIO / !-- Android 13 媒体权限 -- uses-permission android:nameandroid.permission.READ_MEDIA_IMAGES / uses-permission android:nameandroid.permission.READ_MEDIA_VIDEO / !-- Android 13 通知权限 -- uses-permission android:nameandroid.permission.POST_NOTIFICATIONS / !-- 位置权限 -- uses-permission android:nameandroid.permission.ACCESS_FINE_LOCATION / !-- Android 10 后台定位 -- uses-permission android:nameandroid.permission.ACCESS_BACKGROUND_LOCATION /4.2 第二步判断权限是否授权调用危险功能前通过ContextCompat.checkSelfPermission()判断权限是否已授权已授权直接执行功能未授权则申请。4.3 第三步动态申请权限使用AndroidX的ActivityResultContract进行权限申请替代旧的onRequestPermissionsResult回调代码更简洁。支持单个权限和多个权限批量申请。4.4 第四步处理用户授权结果用户授权后在回调中判断结果授权成功则执行对应功能拒绝则提示用户开启权限引导至系统设置页面手动开启。4.5 第五步处理“不再询问”场景用户拒绝权限并勾选“不再询问”后再次申请不会弹出系统对话框需通过shouldShowRequestPermissionRationale()判断友好提示用户前往设置开启权限避免功能无法使用。五、权限申请常见误区与避坑指南误区1只声明不申请Android 6.0仅在清单声明危险权限不动态申请调用功能会触发SecurityException崩溃必须先申请再使用误区2启动时批量申请所有权限启动时一次性申请多个权限用户易反感拒绝建议用到时再申请并提前说明权限用途误区3无视版本差异Android 13仍使用旧存储权限不拆分媒体权限会导致无法访问图片、视频需按版本适配对应权限误区4拒绝后无兼容处理用户拒绝权限后应用直接崩溃或无提示需友好提示权限必要性引导至设置开启同时做降级处理误区5滥用后台权限非必要申请后台定位、后台运行权限应用商店审核会被驳回仅核心功能如持续导航、后台录音才可申请