在react native应用中允许访问GPS后。如果用户拒绝打开gps。它将显示类似
的错误未处理的承诺拒绝:错误:由于设备设置不满意,位置请求失败。”
我想避免用户拒绝Gps打开选项,它将返回一些信息。所以我需要该位置的“如果”条件是“开”还是“关”。 (我正在使用expo-location)
答案 0 :(得分:2)
您将需要检查来自expo-location的状态并将用户重定向到设置,以允许您针对Android使用android Intent的权限,对于iOS您可以使用Linking将用户重定向至设备设置并授予权限< / p>
requestLocationPermission = async () => {
const { status } = await Permissions.askAsync(Permissions.LOCATION);
if (status === 'granted) {
navigation.navigate('screen_name');
} else {
// Alert Message if user does not allow permissions
Alert.alert("alert Message", "Instructions based on OS", [
{
text: 'Open Settings',
onPress: () => goToSettings(),
style: 'cancel',
},
{ text: Languages.DENY, onPress: () => navigation.goback()},
]);
}
};
转到设置
goToSettings = () => {
if (Platform.OS == 'ios') {
// Linking for iOS
Linking.openURL('app-settings:');
} else {
// IntentLauncher for Android
IntentLauncher.startActivityAsync(
IntentLauncher.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS
);
}
};
- 注意Intent启动器是适用于Android的单独软件包
答案 1 :(得分:2)
您看到此错误,因为Location.getCurrentPositionAsync
是async
方法,它返回一个promise,如果失败,则会抛出一个错误(您所看到的错误)。
您可以将代码包装在try
和catch
块中,以捕获错误并对此进行处理。
示例:
_getLocationAsync = async () => {
let { status } = await Permissions.askAsync(Permissions.LOCATION);
if (status !== 'granted') {
alert('The request was denied');
}else{
try{
let location = await Location.getCurrentPositionAsync({});
// do something with location
}catch(e){
alert('We could not find your position. Please make sure your location service provider is on');
console.log('Error while trying to get location: ', e);
}
}
}
// call this._getLocationAsync();
答案 2 :(得分:0)
使用它来打开 GPS:
Location.enableNetworkProviderAsync()
这是一个简单的弹出窗口。 (无需重定向到设置)