如何在Kotlin中实现安卓Marshmallow版本相机运行时权限申请
Kotlin Marshmallow 运行时权限申请实现指导
原Java代码对应的Kotlin直译写法
你提供的权限请求代码转写为Kotlin后格式如下:
ActivityCompat.requestPermissions( this@MainActivity, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE), requestCameraPermissionID )
完整权限适配实现步骤
- 第一步:在
AndroidManifest.xml中声明所需权限,如果你需要申请相机权限,需要额外补充相机权限声明:
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 适配Android13及以上系统时,存储权限需替换为对应媒体细分权限,无需申请READ_EXTERNAL_STORAGE -->
- 第二步:申请权限前先检查授权状态,避免重复发起申请:
// 先定义权限请求码常量,要求为大于等于0的整型 private val requestCameraPermissionID = 1001 // 权限检查逻辑 if (ContextCompat.checkSelfPermission( this@MainActivity, Manifest.permission.CAMERA ) != PackageManager.PERMISSION_GRANTED ) { // 未授权,批量发起相机+存储权限申请 ActivityCompat.requestPermissions( this@MainActivity, arrayOf(Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE), requestCameraPermissionID ) } else { // 已授权,直接执行相机相关逻辑 openCamera() }
- 第三步:重写权限申请结果回调,处理用户授权结果:
override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<out String>, grantResults: IntArray ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == requestCameraPermissionID) { // 判断所有申请的权限是否全部通过 val allGranted = grantResults.all { it == PackageManager.PERMISSION_GRANTED } if (allGranted) { openCamera() } else { // 权限被拒绝,可提示用户手动开启权限 Toast.makeText(this, "需要相机和存储权限才能使用该功能", Toast.LENGTH_SHORT).show() } } }
- 注意事项:
- 如果用户勾选了「不再询问」选项后拒绝权限,需要引导用户跳转到应用设置页手动开启权限
- 不同Android版本的权限规则有差异,需要根据你的目标适配版本调整权限声明逻辑
内容的提问来源于stack exchange,提问作者Muhammad Hamza
相关产品推荐
相关产品推荐

