ReactNative:如何检查用户是否已授予对gps的权限

时间:2019-04-25 11:57:09

标签: ios reactjs geolocation gps native

在iOS中,我正在检查该应用在打开应用时是否具有访问gps的权限。如果没有,我会显示一个取消或接受警报,这将打开设置菜单。但是,一旦用户在设置菜单中打开/关闭gps并返回到应用程序,我就找不到一种检查方法。 我想等待用户从设置中回来并再次检查。

我正在使用navigator.geolocation.getCurrentPosition()Permissions.request("location")if (Permissions.canOpenSettings()){ Permissions.openSettings()...

3 个答案:

答案 0 :(得分:0)

您可以使用AppState并在应用程序再次处于活动状态时添加一个侦听器,以检查该权限是否被拒绝。

  componentDidMount() {
    AppState.addEventListener('change', this._handleAppStateChange);
  }

  componentWillUnmount() {
    AppState.removeEventListener('change', this._handleAppStateChange);
  }

  _handleAppStateChange = (nextAppState) => {
    //Check permission here
  };

答案 1 :(得分:0)

我找到了一种解决方法,当用户返回时它不会对其进行检查,但是会在打开设置窗口时立即打开警报,因此当他返回时,他必须单击“确定”并再次进行检查:

componentDidMount() {
    this.checkPermissions();
  }

checkPermissions(){
    Permissions.check("location").then(resp => { // if resp === "denied" alert to open settings }
}

openSettings(){if (Permissions.canOpenSettings()) {
      Permissions.openSettings().then(this.renderReloadAlert());
    }}

renderReloadAlert() {
    const s = strings.initial;
    Alert.alert(
      s.alertReloadTitle,
      s.alertReloadBody,
      [
        {
          text: s.alertReloadOk,
          onPress: () => this.checkPermissions()
        }
      ],
      { cancelable: false }
    );
  }

答案 2 :(得分:0)

如果您将Expo用作应用程序,则可以致电getPermissionsAsync()

如果返回false,则可以尝试调用以下内容:

const checkForLocationPermission = async () => {
        const result = await getPermissionsAsync();
        if (result.status === 'granted'){
            return true
        } else {
            const response = requestPermissionsAsync();
            if (response.status === 'granted'){
                return true;
            }
        }
        return false
    }

如果您使用钩子,则可以在每次加载屏幕/组件时使用useEffect钩子调用此钩子,或者执行其他一些逻辑来确定何时提问。