Всегда проверять, включены ли службы определения местоположения или нет в React Native (для iOS и Android) - PullRequest
0 голосов
/ 08 ноября 2019

Я работаю над реагированием нативного приложения. Там я должен выбрать местоположение пользователя, например, несколько, если пользователь перемещается / перемещается из одного места в другое. Это работает нормально, но, если пользователь отключает разрешение на определение местоположения через какое-то время, когда пользователь переходит к настройкам с отключенным разрешением, я должен показать некоторую кнопку, например включить местоположение, и снова. После того, как пользователь нажмет на эту кнопку, он должен запросить разрешение на определение местоположения.

Но, если пользователь впервые дает разрешение, а позже через некоторое время, если он его отключает, разрешение всплывающего окна для запроса не отображается в Android при нажатии кнопки.

Я использую следующую библиотекучтобы получить информацию о местоположении пользователя.

import Geolocation from 'react-native-geolocation-service';

// button on click method following
  enableLocationHandler = () => {
    if (Platform.OS === 'android') {
      this.requestLocationPermissions();
    } else {
      Linking.openURL('app-settings:');
      this.getLatitudeLongitude();
    }
  }



requestLocationPermissions = async () => {
    if (Platform.OS === 'android') {
        this.getLatitudeLongitude();
    } else {
      Geolocation.requestAuthorization();
      this.getLatitudeLongitude();
    }
  }



 getLatitudeLongitude() {
    Geolocation.getCurrentPosition((position) => {
      const initialPosition = JSON.stringify(position);
    },
      (error) => {
        if (error.code === 1) {
          this.setState({ errorMessage: 'Location permission is denied', isLoading: false });
          Geolocation.clearWatch(this.watchID);
        }
      },
      { enableHighAccuracy: true, distanceFilter: 100, timeout: 20000, maximumAge: 1000 }
    );
    this.watchID = Geolocation.watchPosition((position) => {
      // this.showLoader();
      // console.log('position', position);
    });
  }

Есть предложения?

1 Ответ

0 голосов
/ 08 ноября 2019

В этом плагине response-native-geolocation-service, нет заявленного разрешения времени выполнения в Android. это в Android, диалоговое окно разрешения не отображается.

Чтобы решить эту проблему, добавьте это разрешение перед запросом места получения

import {PermissionsAndroid} from 'react-native';

async function requestAccessLocationPermission() {
  try {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS. ACCESS_FINE_LOCATION,
      {
        title: 'Application wants location Permission',
        message:
          'Application wants location Permission',
        buttonNeutral: 'Ask Me Later',
        buttonNegative: 'Cancel',
        buttonPositive: 'OK',
      },
    );
    if (granted === PermissionsAndroid.RESULTS.GRANTED) {
    } else {
    }
  } catch (err) {
    console.warn(err);
  }
}

это поможет вам, поможет мне.

...