React native 应对本机/世博会地点权限问题

React native 应对本机/世博会地点权限问题,react-native,expo,React Native,Expo,我对使用Expo构建的React本机Android应用程序的权限有一个问题。当我发布用于测试Play Store的Alpha构建时,应用程序不会提示用户向应用程序授予位置权限。目前我正在尝试获得如下许可: 世博会版本:“世博会”:“^31.0.2”, 在app.json中声明我的权限: "permissions": [ "ACCESS_COARSE_LOCATION", ] LandingPage.js async componentDidMount() { a

我对使用Expo构建的React本机Android应用程序的权限有一个问题。当我发布用于测试Play Store的Alpha构建时,应用程序不会提示用户向应用程序授予位置权限。目前我正在尝试获得如下许可:

世博会版本:
“世博会”:“^31.0.2”,

app.json
中声明我的权限:

"permissions": [
        "ACCESS_COARSE_LOCATION",
      ]
LandingPage.js

async componentDidMount() {
  await this.requestPermission();
}


async requestPermission() {
    try {
      const granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.PERMISSIONS.ACCESS_COARSE_LOCATION)

      if (granted === PermissionsAndroid.RESULTS.GRANTED) {
        this.watchId = navigator.geolocation.watchPosition(
          position => {
            const { latitude, longitude } = position.coords;

            this.setState({
              latitude,
              longitude,
              error: null,
              loading: false,

            });
          },
          error => this.setState({ error: error.message }),
          { enableHighAccuracy: true, timeout: 20000, maximumAge: 20000, distanceFilter: 10 },
        );
      } else {
        const granted = await PermissionsAndroid.request(
          PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
          {
            title: 'Location Access',
            message:
              'We need to access your location so we ' +
              'can give you directions to your selecte venue.',
            buttonNeutral: 'Ask Me Later',
            buttonNegative: 'Cancel',
            buttonPositive: 'OK',
          },
        );
        if (granted === PermissionsAndroid.RESULTS.GRANTED) {
          alert('Location permission granted!');
          this.watchId = navigator.geolocation.watchPosition(
            position => {
              const { latitude, longitude } = position.coords;

              this.setState({
                latitude,
                longitude,
                loading: false,
              });

            },
            error => this.setState({ error: error.message }),
            { enableHighAccuracy: true, timeout: 20000, maximumAge: 20000, distanceFilter: 10 },
          );
        } else {
          alert('Location permission denied');
        }
      }
    } catch (err) {
      console.warn(err)
    }
  }


render() {
  const { loading } = this.state;

  if (loading) {
    return (
      <LoadingScreen />
    )
  } else {
    return (
      <MainPage />
    )
  }
}
异步组件didmount(){ 等待此消息。requestPermission(); } 异步请求权限(){ 试一试{ const grated=wait PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.PERMISSIONS.ACCESS\u位置) 如果(已授予===权限sandroid.RESULTS.已授予){ this.watchId=navigator.geolocation.watchPosition( 位置=>{ 常数{纬度,经度}=position.coords; 这是我的国家({ 纬度, 经度, 错误:null, 加载:false, }); }, error=>this.setState({error:error.message}), {enableHighAccurance:true,超时:20000,最大值:20000,距离筛选器:10}, ); }否则{ 授予的常数=等待许可和ROID.request( 权限和roid.PERMISSIONS.ACCESS\u位置, { 标题:“位置访问”, 信息: '我们需要访问您的位置,以便+ “可以为您指明所选地点的方向。”, buttonNeutral:'稍后再问我', 按钮否定:“取消”, buttonPositive:“OK”, }, ); 如果(已授予===权限sandroid.RESULTS.已授予){ 警报('已授予位置权限!'); this.watchId=navigator.geolocation.watchPosition( 位置=>{ 常数{纬度,经度}=position.coords; 这是我的国家({ 纬度, 经度, 加载:false, }); }, error=>this.setState({error:error.message}), {enableHighAccurance:true,超时:20000,最大值:20000,距离筛选器:10}, ); }否则{ 警报(“位置权限被拒绝”); } } }捕捉(错误){ 控制台。警告(错误) } } render(){ const{loading}=this.state; 如果(装载){ 返回( ) }否则{ 返回( ) } } 我没有收到任何警报-我收到的只是我的
组件旋转

我尝试过像这样使用Expo权限模块
wait Expo.permissions.getAsync(Expo.permissions.LOCATION)但再次-相同的结果


我是否遗漏了将应用程序发布到使用Expo构建的Play Store的相关内容,或者我试图请求权限时出错了?

我不确定授予的
权限和roid.RESULTS。这就是我请求位置许可的方式,它是有效的

let { status } = await Permissions.askAsync(Permissions.LOCATION);
        if(status === 'granted') {
            this.getLocation();
         }

是否总是提示用户输入此权限?@RobGleeson没有用户只提示一次。当代码下次运行时,它会自动返回“已授予”。