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

Android权限请求码查询及仅发送短信权限获取问题

问题解答

1. 是否存在仅发送短信的权限?

有,就是你代码里用的SEND_SMS权限,它本身就是仅用于发送短信的独立权限。你看到系统同时展示读取权限,是因为安卓将短信相关权限(SEND_SMS、READ_SMS、RECEIVE_SMS等)归为同一个权限组,当申请组内任一权限时,系统会把同组的权限都列出来让用户确认,但实际你只申请了SEND_SMS,授权后也只会获得该权限,不会拿到读取短信的权限。

2. 官方页面可查询所有权限请求码?

不存在官方定义的权限请求码常量——请求码是开发者自行定义的整数,用来在权限申请结果回调中区分不同的请求,完全不需要“查询”,只要保证在你的代码里唯一即可。

不过,系统权限的字符串常量(比如SEND_SMS、READ_SMS)可以在android.Manifest.permission类中找到,所有系统权限都在这里定义。

3. 请求码的作用?

请求码的核心作用是在onRequestPermissionsResult回调中标识具体是哪一次权限申请。比如你在同一个页面里既申请短信权限又申请相机权限,用不同的请求码(比如111和222)就能在回调里判断当前结果对应哪一个请求,从而做不同的处理。

你输入随机数字能触发权限申请,是因为请求码只要是合法整数就行,系统只关心这个码能帮你区分请求,不限制具体数值。

4. 如何实现仅申请发送短信权限?

你当前的代码已经是正确的:

// 仅申请发送短信权限
ActivityCompat.requestPermissions(this, arrayOf(SEND_SMS), 111 )

如前面所说,系统展示同组权限是安卓权限组的设计,不影响你实际获得的权限。如果要确认授权状态,可以在回调中检查SEND_SMS的权限:

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    if (requestCode == 111) {
        if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // SEND_SMS权限已授权,可执行发送操作
        } else {
            // 权限被拒绝,提示用户
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:48:27