一、Getting the Last Known Location(获取上一次已经获取过的位置信息)
(1)首先权限如下:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
后两个关于位置的权限,可以确保我们通过API获取非常精确的位置信息,比如精确到一个城市的街道等。
(2)
Connect to Google Play Services(连接到相关的API)
为了连接到相关的API,我们需要创建Google Play services API client.
创建一个Activity,在onCreate方法中创建GoogleApiClient,使用GoogleApiClient.Builder(this)方法创建:
if (mGoogleApiClient == null) { mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); }
上面主要是创建GoogleApiClient的同时,注册了相关的连接事件接口,实现这些接口的方法,我们可以在连接完成,连接失败等进行相应的操作。而且,最重要的是我们添加了API LocationServices.API。
连接至API的方法是直接使用m
GoogleApiClien.connect():
@Override protected void onStart() { if (mGoogleApiClient != null) { mGoogleApiClient.connect(); //} super.onStart(); } @Override protected void onStop() { if (mGoogleApiClient != null) { mGoogleApiClient.disconnect(); } super.onStop(); }Activity需要实现下面两个接口:
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener,
然后分别实现它们的方法,主要是:
@Override public void onConnected(@Nullable Bundle bundle) { mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); if (mLastLocation != null) { System.out.println(mLastLocation.getLatitude()); System.out.println(mLastLocation.getLongitude()); } }
上述最重要的方法就是getLastLacation(GoogleApiClient),需要传入GoogleApiClient。
当然,这里第一次运行时,mLastLocation一定会是null,因为
mLastLocation是获取的上一个已经获取到的位置信息,所以,这里为null。
下一节就可以解决这个问题。