我正在尝试获取用户的最后一个已知位置。
连接Google API后,我会调用我的函数:
@Override
public void onConnected(Bundle bundle) {
initilizeMap();
}
该功能如下所示:
private void initilizeMap(){
mLastLocation = LocationServices.FusedLocationApi
.getLastLocation(mGoogleApiClient);
if (mLastLocation != null){
...
}else{
// location unknown
}
}
我首先打开Google地图以获取用户的当前位置。但是,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
答案 0 :(得分:1)
需要在运行时请求列出的here所列的任何危险权限,如Requesting Permissions at Run Time所示,否则您将收到Permission Denied
错误,这可能会导致您的意外结果应用程序。
您通过以下方式检查权限:
ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.ACCESS_FINE_LOCATION)
它可以返回PackageManager.PERMISSION_GRANTED
或PackageManager.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
的回调,您可以在其中处理权限允许/拒绝的结果。