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
相关产品推荐
相关产品推荐

