Статус React-Native / Expo Location, если пользователь не хочет разрешать местоположение после предоставления разрешения приложению - PullRequest
0 голосов
/ 23 января 2020

После разрешения разрешения на доступ к GPS в реакции родного приложения. Если пользователь отказался включить GPS. Он будет отображать ошибки, такие как

Необработанное отклонение обещания: Ошибка: запрос местоположения не выполнен из-за неудовлетворительных настроек устройства. "

Я хочу избежать, если пользователь отклоняет поворот Gps on option Это что-то вернет. Мне нужно условие If для местоположения, независимо от того, включено оно или выключено (я использую expo-location)

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Вы видите эту ошибку, потому что Location.getCurrentPositionAsync - это метод async, и он возвращает обещание, а в случае неудачи выдает ошибку (ошибку, которую вы видите).

Вы можете перенести Ваш код внутри блока 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();
0 голосов
/ 23 января 2020

вам нужно будет проверить статус из expo-location и перенаправить пользователя в настройки, чтобы получить разрешение, для которого вы можете использовать android намерения для 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()},
      ]);
    }
  };

go на настройки

  goToSettings = () => {
    if (Platform.OS == 'ios') {
      // Linking for iOS
      Linking.openURL('app-settings:');
    } else {
      // IntentLauncher for Android
      IntentLauncher.startActivityAsync(
        IntentLauncher.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS
      );
    }
  };

  • ПРИМЕЧАНИЕ Модуль запуска намерений - это отдельный пакет для android
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...