我正在开发的react-native应用程序使用蓝牙。 在IOS版本中,唯一需要用户确认的权限是尝试触发LEPairing。 但是,在应用程序的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;
});
为什么安卓版需要粗略的位置,而IOS版不需要?
正如您可以在官方文档中阅读的那样
注意: LE 信标通常与位置相关联.为了使用 蓝牙LeScanner,您必须通过以下方式请求用户的许可 声明ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION 应用清单文件中的权限。如果没有这些权限, 扫描不会返回任何结果。
与Android 10一起,引入了一些更改文档
如果您的应用以 Android 10 或更高版本为目标平台,则必须具有ACCESS_FINE_LOCATION权限,才能在 Wi-Fi、Wi-Fi 感知或蓝牙 API 中使用多种方法。以下各节列出了受影响的类和方法。