首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用户拒绝后,如何重新请求Android 12的BLUETOOTH_SCAN和BLUETOOTH_CONNECT权限?

用户拒绝后,如何重新请求Android 12的BLUETOOTH_SCAN和BLUETOOTH_CONNECT权限?
EN

Stack Overflow用户
提问于 2022-05-20 14:29:40
回答 1查看 780关注 0票数 1

当以SDK 31 (Android 12)为目标时,我在重新请求扫描和连接蓝牙设备所需的权限时遇到了问题。

我在我的主活动的onCreate()中调用这个方法

代码语言:javascript
复制
public void requestBluetoothPermissions() {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {

        if ((this.checkSelfPermission(Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED)
            || (this.checkSelfPermission(Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED)) {

            Log.w(getClass().getName(), "requestBluetoothPermissions() BLUETOOTH_SCAN AND BLUETOOTH_CONNECT permissions needed => requesting them...");

            this.requestPermissions(new String[]{
                    Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT
            }, MyActivity.REQUEST_BLUETOOTH_PERMISSIONS);

        }
    }
}

它在第一次被调用时运行良好,即向用户显示一个Android弹出,提示用户授予权限。

但是,如果他拒绝授予权限,下次调用onCreate()时,弹出就不会显示,这意味着用户仍然无法授予权限。

知道为什么怎么解决吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-31 13:10:07

在用户只拒绝一次后,Android 12就会请求同样的许可。

因此,我最终使用ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.BLUETOOTH_SCAN)来确定是否可以请求权限,在这种情况下,将显示一条snackbar消息,解释为什么需要该权限,并使用一个按钮打开可以授予权限的应用程序设置。

下面是代码的示例:

代码语言:javascript
复制
public void requestBluetoothPermissions() {

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {

        if ((this.checkSelfPermission(Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED)
            || (this.checkSelfPermission(Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED)) {

            if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
                    Manifest.permission.BLUETOOTH_SCAN)) {

                 // display permission rationale in snackbar message
            } else {
                Log.w(getClass().getName(), "requestBluetoothPermissions() BLUETOOTH_SCAN AND BLUETOOTH_CONNECT permissions needed => requesting them...");

                this.requestPermissions(new String[]{
                    Manifest.permission.BLUETOOTH_SCAN, Manifest.permission.BLUETOOTH_CONNECT
                    }, MyActivity.REQUEST_BLUETOOTH_PERMISSIONS);
            }
        }
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72320621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档