Android运行时权限异常:重写onRequestPermissionsResult后仍报错
Android权限授权后仍报错的原因及解决办法
嘿,我遇到过类似的权限坑,来帮你捋清楚问题出在哪以及怎么解决!你收到的这个错误提示,本质是系统或Lint静态检查认为你没有在执行需要权限的代码前显式确认权限状态——哪怕你已经处理了授权回调,也可能因为逻辑漏洞或时机问题触发这个警告。
可能的原因
- 权限检查逻辑有漏洞:比如你只在
onRequestPermissionsResult里调用startLocationUpdates,但没有在startLocationUpdates内部再次做权限检查。系统权限状态可能存在短暂不同步,或者后续再次调用该方法时没做校验。 - onRequestPermissionsResult判断错误:比如申请了多个权限,但只判断了单个权限是否授予;或者数组索引写错,导致误判权限已通过。
- Lint静态检查误报:有时候你的权限检查逻辑没问题,但代码结构让Lint识别不到(比如检查和权限代码之间有其他分支逻辑),导致误触发警告。
具体解决办法
1. 在需要权限的方法内部强制做权限检查
不管什么时候调用startLocationUpdates,都要在方法开头先确认权限状态,这是最稳妥的做法:
private fun startLocationUpdates() { // 根据你的需求调整要检查的权限 val hasFineLocation = ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_FINE_LOCATION ) == PackageManager.PERMISSION_GRANTED val hasCoarseLocation = ActivityCompat.checkSelfPermission( this, Manifest.permission.ACCESS_COARSE_LOCATION ) == PackageManager.PERMISSION_GRANTED if (hasFineLocation && hasCoarseLocation) { // 权限确认通过,执行定位更新逻辑 locationManager.requestLocationUpdates(...) } else { // 权限缺失,再次申请或提示用户去设置开启 ActivityCompat.requestPermissions( this, arrayOf( Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION ), LOCATION_PERMISSION_REQUEST_CODE // 自定义请求码 ) } }
2. 修正onRequestPermissionsResult的处理逻辑
确保正确判断所有申请的权限都被授予,避免误判:
override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<out String>, grantResults: IntArray ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == LOCATION_PERMISSION_REQUEST_CODE) { // 检查所有申请的权限是否都通过 val allGranted = grantResults.all { it == PackageManager.PERMISSION_GRANTED } if (allGranted) { startLocationUpdates() } else { Toast.makeText(this, "定位权限未开启,无法获取位置信息", Toast.LENGTH_SHORT).show() } } }
3. 处理Lint误报(最后手段)
如果确认权限检查逻辑完全正确,但Lint仍报错,可以在方法上添加注解抑制警告,但不推荐优先使用:
@SuppressLint("MissingPermission") private fun startLocationUpdates() { // 你的定位逻辑代码 }
4. 检查权限申请与检查的一致性
确保你申请的权限数组和检查的权限完全对应,比如申请了ACCESS_FINE_LOCATION,就不要只检查ACCESS_COARSE_LOCATION,避免漏检。
内容的提问来源于stack exchange,提问作者Osama Mohammed
相关产品推荐
相关产品推荐

