权限Android未显示在React Native应用中

时间:2018-10-17 06:48:54

标签: javascript android google-maps react-native permissions

因此,我更改了地理位置,现在我从'react-native-geolocation-service'开始使用地理位置。所以我的问题现在不确定我的PermissionsAndroid代码是否正确,因为没有显示“位置许可”对话框。每次我按下“未授予位置权限”按钮时,都会在console.log中显示,这意味着未授予权限。正如我所说的,没有显示“权限”对话框。

如果我的错误在哪里,我希望你们检查我的代码。 这些是我的代码:

hasLocationPermission = () => {
try{
  const granted = PermissionsAndroid.request(
    PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
    {
      title: 'Location Permission',
      message: 'You must to accept this to make it work.'
    }
  )
  if(granted === PermissionsAndroid.RESULTS.GRANTED){
    console.log('Location permission accepted.')
  }else{
    console.log("Location permission denied")
  }
} catch (err) {
  console.warn(err)
}
}

getUserLocationHandler = () => {
if(this.hasLocationPermission){
  Geolocation.getCurrentPosition(
    position => {
      this.setState({
        userLocation: {
          latitude: position.coords.latitude,
          longitude: position.coords.longitude,
          latitudeDelta: 0.0622,
          longitudeDelta: 0.0421,
        },
      });
    },
    err => console.log(err),
    {
      enableHighAccuracy: true,
      timeout: 15000,
      maximumAge: 10000

    }
  );
}
}

 render() {
return (
  <View style={styles.container}>
    <FetchLocation onGetLocation={this.getUserLocationHandler}/>
    <UsersMap userLocation={this.state.userLocation}/>
  </View>
);
}
  

“ FetchLocation”是按钮,“ UsersMap”是地图。

     

如果你们知道如何像Grab应用程序一样在应用程序打开之前显示权限对话框,那会更好。谢谢!

     

如果您想在我的代码或build.gradles中看到其他内容,请随时提出。谢谢!

3 个答案:

答案 0 :(得分:0)

您是否已在AndroidManifest文件中添加权限?就像documentation所说的那样。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

答案 1 :(得分:0)

您要添加权限的用户定义文本:

title: 'Location Permission',
message: 'You must to accept this to make it work.'

不会显示第一个Permission-Reuquest。但是,如果用户单击“拒绝”,而您再次在应用程序中请求权限,则会显示您的文本。

我也为此感到挣扎,但是文档描述了这种行为:

  

如果用户先前已关闭您提示的权限,则操作系统将建议您的应用显示需要该权限的理由。可选的基本原理参数仅在必要时显示对话框提示-否则,将显示普通权限提示。

因此,如果您不希望通知用户,则需要什么权限,看来您需要在第一个Permission-Request之前使用警报。

如果有人有其他选择,我将很高兴听到。

答案 2 :(得分:0)

检查您的应用是否已获得许可,如果授予许可,则不会显示任何弹出窗口