LocationService.FusedLocation 仅在某些设备上返回 null

LocationService.FusedLocation returning null only on some devices

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

GoogleAPI连接后,我调用我的函数:

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

函数如下所示:

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

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

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

最有趣的是代码在索尼平板电脑上运行。但是我今天将 phone 更改为 Nexus,但它无法在此设备上运行!

我该如何解决这个问题?

P.S。我在我的清单文件中包含了这些权限:

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

和android版本是6.0.1

列出的任何危险权限 here need to be requested at run time, as shown on Requesting Permissions at Run Time 否则您将收到 Permission Denied 错误,这可能会在您的应用程序中产生意外结果。

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

它可以 return 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 的回调,您在其中处理权限 allow/deny 的结果。