在 Android 8.0.0 Oreo 中无法获取位置

Posted

技术标签:

【中文标题】在 Android 8.0.0 Oreo 中无法获取位置【英文标题】:Not getting location in Android 8.0.0 Oreo 【发布时间】:2019-03-03 09:49:05 【问题描述】:

我正在使用 React-Native 构建一个应用程序,并且需要根据要求获得位置访问权限。

我也尝试过使用react-native-fused-location,如下所示。

           FusedLocation.setLocationInterval(20000);
           FusedLocation.setFastestLocationInterval(15000);
          FusedLocation.setSmallestDisplacement(10);

          FusedLocation.setLocationPriority(
            FusedLocation.Constants.HIGH_ACCURACY
          );
          FusedLocation.startLocationUpdates();


          FusedLocation.getFusedLocation().then(location => 

            if (location != null) 
              let initialPosition = JSON.stringify(location);
              this.state.latitude = location.latitude;
              this.state.longitude = location.longitude;
              this.state.timestamp = location.timestamp;
              this.state.initialPosition = initialPosition;


             else 
              alert("Location unavailable, please try later");
            
          ).catch(error =>   // fused location catch
             console.log("location retrieval failed");
          );

如果是 Oreo 8.0.0,我收到上述代码的唯一输出是 E/request: 100

也尝试了以下其他方式

navigator.geolocation.watchPosition(
            location => 
              console.log("inside watchPosition location");
              if (location != null) 
                console.log("location is not null");
                let initialPosition = JSON.stringify(location.coords);
                this.state.latitude = location.coords.latitude;
                this.state.longitude = location.coords.longitude;
                this.state.timestamp = location.coords.timestamp;
                this.state.initialPosition = initialPosition;


               else 
                alert("Location unavailable, please try later");
              
            ,
            error => 
              console.log("calling ShowHideActivityIndicator,  getLocationWithNavigate (ios)");

              this.ShowHideActivityIndicator(false);
              alert("location retrieval failed");
              console.log(error);
            ,
             timeout: 20000, enableHighAccuracy: true, distanceFilter: 10 
          );

但在上述两个代码中获得相同的输出,即无法在 android Oreo 8.0.0 中专门获取位置。甚至没有调用位置检索回调。尽管在其他版本(包括 Oreo 8.1.0)和更低版本的设备(包括 Marshmallow 和 Nougat)中,它似乎运行良好。

不过,如果我在 Oreo 8.0.0 中打开假 GPS,那么它似乎能够获取位置。我无法弄清楚,我错过了什么。

【问题讨论】:

【参考方案1】:

提及谷歌文档:

为了降低功耗,Android 8.0(API 级别 26)限制了后台应用检索用户当前位置的频率。应用每小时只能接收几次位置更新。Background Location Limits

【讨论】:

以上是关于在 Android 8.0.0 Oreo 中无法获取位置的主要内容,如果未能解决你的问题,请参考以下文章

离子推送通知自定义声音无法在 Android Oreo 及更高版本上播放

Android Studio 无法识别 Oreo 的最新版本代码或新窗口类型

android Oreo Crash错误

Android Oreo 上未添加地理围栏

ScanCall回来没有进入Android Oreo

Android Oreo onTaskRemoved 事件不起作用(Android 版本 Oreo)