我知道我可以使用 React Native 在 iOS 上请求地理定位权限,如下所示:
await navigator.geolocation.requestAuthorization()
但是,我如何知道用户是否授予了权限?上面的函数没有返回任何内容。
我想避免使用第三方库来执行此操作,如这个答案所示: 确定是否使用 React Native 启用地理定位
最受欢迎的 Permissions 3rd 方库已经 10 个月没有更新了,并且不支持最新版本的 React Native。
这就是我所能弄清楚的:https://snack.expo.io/@zvona/geolocation-permissions
因此,该函数将如下所示:
checkPermission = () => {
navigator.geolocation
.getCurrentPosition(
() => this.setState({permission: 'GRANTED'}),
() => this.setState({permission: 'DENIED'})
);
}
这可以在某些操作中调用,或者例如在
componentDidMount
。
如果您需要重定向用户以允许访问设置中的位置,请参阅我的其他示例:https://snack.expo.io/@zvona/open-app-settings其中代码行:
Linking.openURL("app-settings:");
就可以了。
我使用了react-native-geolocation-service包中的地理定位来解决ios和android的这个问题
const getLocationServicesStatus = async () => {try {
if (Platform.OS === 'android') {
const locationStatus = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
);
return locationStatus === PermissionsAndroid.RESULTS.GRANTED;
}
if (Platform.OS === 'ios') {
const locationStatus = await geolocation.requestAuthorization(
'whenInUse',
);
return locationStatus === 'granted';
}
return null } catch (error) {
logger.warn('Error checking location status:', error);
return null;
} };