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

Kotlin中checkSelfPermission方法类型不匹配错误求助

解决Kotlin中ContextCompat.checkSelfPermission类型不匹配问题

问题根源

ContextCompat.checkSelfPermission()方法的返回值是Int类型,你直接将其放到if条件中时,Kotlin会因类型不匹配报错(if需要Boolean类型表达式,实际得到Int)。

该方法的返回值对应两个系统常量:

  • PackageManager.PERMISSION_GRANTED(值为0):权限已授予
  • PackageManager.PERMISSION_DENIED(值为-1):权限被拒绝

修正后的代码

将返回值与PackageManager.PERMISSION_GRANTED做比较,转为Boolean表达式即可:

// 定义权限请求码常量
private const val REQUEST_CODE_SMS = 100

// 权限检查逻辑
if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) == PackageManager.PERMISSION_GRANTED) {
    // 权限已授予,执行发送SMS操作
    sendSMS()
} else {
    // 权限未授予,发起动态申请
    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.SEND_SMS), REQUEST_CODE_SMS)
}

补充权限申请回调处理

动态申请权限后,需要重写onRequestPermissionsResult处理用户的选择:

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    when (requestCode) {
        REQUEST_CODE_SMS -> {
            if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 用户同意权限,执行发送操作
                sendSMS()
            } else {
                // 用户拒绝权限,提示无法完成发送
                Toast.makeText(this, "需要SEND_SMS权限才能发送短信", Toast.LENGTH_SHORT).show()
            }
        }
    }
}

前置检查

确保你已在AndroidManifest.xml中声明权限:

<uses-permission android:name="android.permission.SEND_SMS" />

内容的提问来源于stack exchange,提问作者Abdur Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:12:09