为何申请Android运行时权限后onRequestPermissionsResult返回的requestCode为1而非200?
问题分析与解决方案
这大概率是你使用的RuntimePermissions类在内部悄悄发起了权限请求,并且用了它自己的requestCode(也就是1),直接覆盖或者抢先执行了你手动调用的ActivityCompat.requestPermissions(..., 200)。
具体原因拆解:
- 你先调用了
mRuntimePermissions.hasPermissions(),如果这个方法的内部实现不仅仅是判断权限状态,还在权限不足时自动发起了权限请求(很多封装类会这么做),那实际触发权限弹窗的是这个类的内部逻辑,而不是你写的ActivityCompat.requestPermissions那行代码。 - 这种情况下,回调里拿到的自然是
RuntimePermissions内部使用的requestCode(也就是1),而不是你传入的200。
验证步骤:
- 先检查
RuntimePermissions类的源码(如果是你自己实现的),看看它有没有调用requestPermissions方法,并且传入了固定值1作为requestCode。 - 临时注释掉你代码里的
ActivityCompat.requestPermissions(this, permissions, 200);这一行,运行后看看是否依然会弹出权限请求。如果会,就坐实了是这个封装类在内部发起了请求。 - 在
hasPermissions()调用后添加日志,确认进入else分支之前,权限请求是否已经被触发。
解决方案:
- 如果
RuntimePermissions是自定义类:修改它的实现,要么让它支持传入自定义requestCode(比如在构造方法里添加参数),要么把它内部的requestCode改成200,和你手动调用的保持一致。 - 如果是第三方库的类:查看它的文档,确认它是否有自己的权限回调接口,或者是否需要通过特定方式接收权限结果,而不是依赖Activity的
onRequestPermissionsResult。 - 也可以考虑暂时移除这个封装类,直接用原生的
ActivityCompat.requestPermissions处理权限请求,这样能完全控制requestCode和回调逻辑。
内容的提问来源于stack exchange,提问作者Gissipi_453
相关产品推荐
相关产品推荐

