【问题标题】:React-Native/Expo Location status if it user don't want to allow location after giving permission to appReact-Native/Expo Location 状态,如果用户在授予应用权限后不想允许位置
【发布时间】:2020-05-09 09:43:16
【问题描述】:

在反应原生应用中允许访问 GPS 的权限后。如果用户拒绝打开gps。它会显示像

这样的错误

未处理的承诺拒绝:错误:由于设备设置不满意,位置请求失败。”

如果用户拒绝 Gps 打开选项,我想避免它会返回一些东西。所以我需要该位置的 If 条件,无论它是打开还是关闭。 (我正在使用博览会位置)

【问题讨论】:

  • 很抱歉,您的疑问无法解答,请具体说明
  • 在 react native App 中允许访问 GPS 的权限后。如果用户拒绝打开 gps,它会显示诸如“未处理的承诺拒绝:错误:由于设备设置不满意而导致位置请求失败”之类的错误。如果用户拒绝 Gps 打开选项,我想避免它会返回一些东西。所以我需要该位置的 If 条件,无论它是打开还是关闭。 (我正在使用博览会位置)

标签: react-native geolocation expo


【解决方案1】:

您需要检查来自 expo-location 的状态并将用户重定向到设置以允许您可以使用 android Intent 用于 android 和 ios,您可以使用 Linking 将用户重定向到设备设置并授予权限

  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 的单独包

【讨论】:

  • 谢谢,但我需要拒绝条件(用于返回空状态)
  • 权限状态不返回 null > 可能值的权限状态:已授予、已拒绝、未确定。上面的代码也将处理 null 值,如果不添加另一个 else if 条件
【解决方案2】:

您看到此错误是因为 Location.getCurrentPositionAsyncasync 方法并且它返回一个承诺,如果它失败它会抛出一个错误(您看到的错误)。

您可以将代码包装在 trycatch 块中以捕获错误并对其进行处理。 示例:

_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();

【讨论】:

    【解决方案3】:

    使用它来打开 GPS:

    Location.enableNetworkProviderAsync()

    这是一个简单的弹出窗口。 (不重定向到设置)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 1970-01-01
      • 2022-11-08
      • 1970-01-01
      • 2021-03-22
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多