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

为何申请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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:06:59