Android 请求阅读“短信请求”;发送和查看短信息”;

Android 请求阅读“短信请求”;发送和查看短信息”;,android,permissions,sms,android-6.0-marshmallow,Android,Permissions,Sms,Android 6.0 Marshmallow,我的应用只需要使用“阅读短信”权限。 我的问题是,在Android 6.0上,当我需要使用新的权限系统时,它会要求用户“发送和查看短信” 这是我的代码: ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_SMS}, READ_SMS_PERMISION_REQ); 发生了什么事? 谢谢 发生了什么事 它正在按预期工作 当我们通过requestPermissions()请求

我的应用只需要使用“阅读短信”权限。 我的问题是,在Android 6.0上,当我需要使用新的权限系统时,它会要求用户“发送和查看短信”

这是我的代码:

ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_SMS}, READ_SMS_PERMISION_REQ);
发生了什么事? 谢谢

发生了什么事

它正在按预期工作

当我们通过
requestPermissions()
请求权限时,用户接受或拒绝权限组。因此,如果您的阵列具有
读取\u SMS
发送\u SMS
,尽管有两个权限,但用户只需在运行时权限对话框中接受一件事。或者,如果您只有
READ\u SMS
(并且用户授予了权限),但后来又为
SEND\u SMS
调用了
checkSelfPermission()
,您会被告知您拥有它,因为用户授予了整个SMS权限组

缺点是权限组通常包含读和写权限,因此即使您只请求读,用户也会被告知您可能会写

我的猜测是,目标是降低接受/拒绝决策的粒度。
requestPermissions()
接受权限而不是组,这意味着如果读写问题成为用户或开发人员的问题,谷歌有权在未来版本的Android中改变主意。

我正在使用它

 if (BuildUtil.isAndroidM()) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) !=
                PackageManager.PERMISSION_GRANTED &&
                ActivityCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS) !=
                        PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, PermissionUtil.sms(),
                    PermissionUtil.PERMISSION_SMS);
        } else {
            // TODO
        }
    } else {
        // TODO
    }

这确实是个问题!但我不确定我是否像你一样阅读它。。。上面写着“读短信和发短信”,而不是读短信或发短信。因此,只有你同时做到这两个,它才能传播这一信息。我的应用程序只需要读短信注册,为什么显示写短信给用户?太疯狂了!所以,我只是想了解。。。它们将始终显示分组消息?这太疯狂了。@roiberg:“它们总是显示分组消息?”——这是Android 6.0的方式,至少在当前的开发者预览中是这样。请记住,这与用户在过去两年左右的Play Store中看到的情况类似。例如,如果我单击Go SMS Pro的“安装”,我会被告知它“使用一个或多个:SMS、MMS。可能会收费。”它并不表示具有读写功能。只有当用户点击“权限”链接时,他们才能获得完整的详细信息,而Android 6.0应该不会改变。在我看来,说“短信”并带有查看该短信的选项比说“读写”而没有查看选项要好10倍。哦,当我说“永远”时,我不是指将来,我是指在所有情况下。它是否显示从今天起所有情况下的分组消息。谢谢!这太愚蠢了!!如果我们能控制问什么会好得多。但这不是你的错:)这是毫无意义的。。。在低于M的版本上,当您请求权限时不会发生任何事情。。。他们只是跳转到回调