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

时间:2016-03-23 18:07:43

标签: java android google-maps fusedlocationproviderapi

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

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

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

该功能如下所示:

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

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

我首先打开Goog​​le地图以获取用户的当前位置。但是,mLastLocation仍然为空。

最有趣的是代码正在索尼平板电脑上运行。但是今天我把手机改成了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

1 个答案:

答案 0 :(得分: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的回调,您可以在其中处理权限允许/拒绝的结果。