You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:48:02