getLastKnownLocation在更高版本的Android (6及以上)中不起作用是因为在Android 6及以上的版本中,Google对定位权限进行了更严格的限制。getLastKnownLocation方法是用来获取设备上一次已知的位置信息,但在新的权限模型下,应用程序需要获取定位权限并且用户必须授予该权限才能使用该方法。
在Android 6及以上的版本中,应用程序需要通过运行时权限的方式来获取定位权限。运行时权限是一种动态权限控制机制,它允许应用程序在运行时向用户请求权限。因此,如果应用程序没有获取定位权限,getLastKnownLocation方法将无法返回有效的位置信息。
为了解决这个问题,开发人员应该使用新的定位API,如Google Play服务中的Fused Location Provider API。Fused Location Provider API提供了更精确和可靠的位置信息,并且可以与运行时权限机制无缝集成。
使用Fused Location Provider API获取设备的最新位置信息的步骤如下:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
mGoogleApiClient.connect();
// 请求定位权限
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
}
@Override
public void onConnected(Bundle connectionHint) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
== PackageManager.PERMISSION_GRANTED) {
Location lastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (lastLocation != null) {
// 处理位置信息
}
}
}
通过使用Fused Location Provider API,开发人员可以在Android 6及以上的版本中获取到设备的最新位置信息,并且与运行时权限机制无缝集成。这样可以确保应用程序在不同版本的Android设备上都能正常工作。
腾讯云相关产品推荐:腾讯位置服务(https://cloud.tencent.com/product/lbs)是腾讯云提供的一项定位服务,可以帮助开发人员获取设备的位置信息,并提供了丰富的地理位置相关功能和服务。
领取专属 10元无门槛券
手把手带您无忧上云