App通过调用Google play services API来获取设备最近一次的位置信息,在大多数情况下最近一次的位置信息就是当前位置信息。
设置位置权限
要想获取位置服务,应用必须具备位置权限:ACCESS_COARSE_LOCATION 和 ACCESS_FINE_LOCATION。ACCESS_COARSE_LOCATION精度不高,只能精确到城市级别,而ACCESS_FINE_LOCATION精度较高,能够满足大多数普通应用情况下的精度。位置权限必须要在Androidmanifest.xml声明。
连接到Google Play Services
首先创建一个Google Play Services API Client实例,用GoogleApiClient.Builder这个类来添加位置服务API(LocationServices):
// Create an instance of GoogleAPIClient.
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
接着用实例进行连接(connect),当需要断开连接时,调用disconnect。代码实例如下:
protected void onStart() {
mGoogleApiClient.connect();
super.onStart();
}
protected void onStop() {
mGoogleApiClient.disconnect();
super.onStop();
}
- 获取最近一次的位置信息
当应用与Google Play services连接成功后,就可以用fused location provider的接口来获取位置信息。位置的精度取决于你再Androidmanifest.xml文件中设置的位置权限有关。
通过传递GoogleApiClient对象给getLastLocation(),获取最近一次的位置信息。该函数返回一个Location对象,从该对象中可以获取经纬度,当位置不可用时,函数返回null。具体代码如下:
public class MainActivity extends ActionBarActivity implements
ConnectionCallbacks, OnConnectionFailedListener {
...
@Override
public void onConnected(Bundle connectionHint) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(
mGoogleApiClient);
if (mLastLocation != null) {
mLatitudeText.setText(String.valueOf(mLastLocation.getLatitude()));
mLongitudeText.setText(String.valueOf(mLastLocation.getLongitude()));
}
}
}