1. Android权限申请的前世今生
第一次在Android项目里处理权限申请时,我对着满屏的checkSelfPermission和requestPermissions代码陷入了沉思。这就像每次进小区都要向保安出示身份证,明明昨天刚见过面,今天又要走全套流程。从Android 6.0(API 23)开始引入的运行时权限机制,虽然增强了用户隐私保护,却给开发者带来了不少麻烦。
原生API的权限申请流程就像老式收音机的调频旋钮,需要手动完成三个关键步骤:首先在AndroidManifest.xml声明权限,这相当于买门票的资格;接着用checkSelfPermission检查当前权限状态,相当于询问保安是否认识你;最后通过requestPermissions弹出系统对话框,相当于现场办理通行证。整个过程需要处理各种边界情况,比如用户拒绝后的二次申请、永久拒绝后的引导跳转等。
最让人头疼的是权限回调的处理。在Activity中重写onRequestPermissionsResult方法时,我经常要写一堆if-else来判断requestCode和grantResults。就像餐厅服务员要记住每位顾客的桌号和菜品,稍有不慎就会上错菜。更麻烦的是,当用户勾选"不再询问"后,下次调用requestPermissions会直接静默失败,这时候不得不引导用户去系统设置页手动开启权限。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 原生API的实战踩坑记录
去年做一个相机应用时,我深刻领教了原生权限API的"威力"。当时需要同时申请CAMERA和WRITE_EXTERNAL_STORAGE权限,代码写着写着就变成了俄罗斯套娃:
kotlin复制private fun checkCameraPermission() {
when {
ContextCompat.checkSelfPermission(this, CAMERA) == PERMISSION_GRANTED -> {
checkStoragePermission()
}
shouldShowRequestPermissionRationale(CAMERA) -> {
showRationaleDialog("需要相机权限来拍照
