【问题标题】:LocationService.FusedLocation returning null only on some devicesLocationService.FusedLocation 仅在某些设备上返回 null
【发布时间】:2016-03-23 18:07:42
【问题描述】:

我正在尝试获取用户的最后一个已知位置。

Google API 连接后,我调用我的函数:

@Override
public void onConnected(Bundle bundle) {
    initilizeMap();
}

函数如下所示:

private void initilizeMap(){
    mLastLocation = LocationServices.FusedLocationApi
            .getLastLocation(mGoogleApiClient);

    if (mLastLocation != null){
        ...
    }else{
        // location unknown
    }
}

我首先打开了谷歌地图来获取用户的当前位置。但是,mLastLocation 仍然为空。

最有趣的是代码在索尼平板电脑上运行。但我今天将手机换成了 Nexus,但在这台设备上无法使用!

我该如何解决这个问题?

附:我在清单文件中包含了这些权限:

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

安卓版本是6.0.1

【问题讨论】:

  • 密码好像没问题,可能和你的手机有关?
  • @EricS。我希望不是!我刚买了它:(虽然谷歌地图正在运行
  • 我确定你的手机没问题,我想可能是设置什么的。
  • 位置已开启!还能是什么?
  • 您申请了权限吗?

标签: java android google-maps fusedlocationproviderapi


【解决方案1】:

here 列出的任何危险权限都需要在运行时请求,如Requesting Permissions at Run Time 所示,否则您将收到Permission Denied 错误,这可能会在您的应用中产生意外结果。

您检查权限: ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ACCESS_FINE_LOCATION)

它可以返回PackageManager.PERMISSION_GRANTEDPackageManager.PERMISSION_DENIED

如果您获得PackageManager.PERMISSION_DENIED,那么您可以通过以下方式请求该权限:

ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_LOCATION);

其中MY_PERMISSION_REQUEST_ACCESS_LOCATION 是您定义的int 变量,它被传递给onRequestPermissionsResult 的回调函数,您可以在其中处理权限允许/拒绝的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2019-12-27
    相关资源
    最近更新 更多