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

