【发布时间】:2015-03-04 10:39:22
【问题描述】:
我是 Android 应用开发的新手,我目前正在研究使用 Google Play 服务 检索用户的当前位置(坐标和城市)。截至目前,我找不到任何明确的分步教程。 任何建议或指导将不胜感激!
【问题讨论】:
-
使用融合位置提供者尝试在谷歌上搜索你会发现很多例子
标签: java android location google-play-services
我是 Android 应用开发的新手,我目前正在研究使用 Google Play 服务 检索用户的当前位置(坐标和城市)。截至目前,我找不到任何明确的分步教程。 任何建议或指导将不胜感激!
【问题讨论】:
标签: java android location google-play-services
您可以使用 Google Play 服务库中的 fused location provider API 来检索设备的 last known location:
Location lastLocation = LocationServices.FusedLocationApi
.getLastLocation(mGoogleApiClient);
if (lastLocation != null) {
double latitude = lastLocation.getLatitude();
double longitude = lastLocation.getLongitude();
//Once you get the coordinates, you can retrieve the city name using the Geocoder class:
Geocoder gcd = new Geocoder(getBaseContext(), Locale.getDefault());
List<Address> addresses;
addresses = gcd.getFromLocation(latitude, longitude, 1);
if (addresses != null) {
if (addresses.size() > 0)
String cityName = addresses.get(0).getLocality();
}
}
在您的清单中:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
这里是a detailed tutorial 为您提供帮助
【讨论】:
这就是 Google Android 文档中关于使用 FusedLocationProvider
获取当前位置的内容在大多数情况下,您对用户的当前位置感兴趣, 这通常相当于设备的最后一个已知位置。
你可以用这个方法
public void getCurrentLocation() {
FusedLocationProviderClient locationProviderClient = LocationServices.
getFusedLocationProviderClient(this);
locationProviderClient.getLastLocation()
.addOnSuccessListener(new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
Log.d("Location",currentLocation.toString());
}
});
}
}
您需要添加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
上面的代码是简化版。如果您的应用在 Android Lollipop 及更高版本上运行,那么您需要询问 Location permission at runtimeALSO。
你可以看到完整的代码HERE。
【讨论】:
最新的google play服务不需要连接GoogleApiClient,直接请求位置更新即可。
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(20 * 1000);
mFusedLocationProviderClient.requestLocationUpdates(locationRequest,locationCallback, Looper.myLooper());
locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
}
};
【讨论】: