为什么Android版本的应用程序需要COARSE LOCATION权限才能访问蓝牙?

时间:2019-01-28 07:46:14

标签: android react-native bluetooth permissions

我正在使用的本机应用程序使用蓝牙。在IOS版本中,唯一需要用户确认的权限是tryToTriggerLEPairing。但是,在该应用的Android版本中,有一种方法包含以下内容:

PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION)
        .then(granted => {
            if (granted === PermissionsAndroid.RESULTS.GRANTED || granted === true) {
                this.startScan();
                return;
            }
            return PermissionsAndroid.request(
                PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION, {
                    'title': I18n.t('permission_location_title'),
                    'message': I18n.t('permission_location_desc')
                }
            )
                .then(granted => {
                    if (granted === PermissionsAndroid.RESULTS.GRANTED || granted === true) {
                        this.startScan();
                    }
                })
        })
        .catch(error => {
            // TODO: error;
        });

为什么Android版本要求粗略的位置,而IOS版本不需要?

2 个答案:

答案 0 :(得分:1)

您可以在官方documentation上阅读

  

注意:LE信标通常与位置相关联。为了使用   BluetoothLeScanner,您必须通过以下方式请求用户的许可   声明ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION   应用清单文件中的权限。没有这些权限,   扫描不会返回任何结果。

答案 1 :(得分:0)

在Android 10上,documentation引入了一些更改

如果您的应用面向Android 10或更高版本,则它必须具有ACCESS_FINE_LOCATION权限,才能在Wi-Fi,Wi-Fi感知或蓝牙API中使用多种方法。以下各节列出了受影响的类和方法。