This lesson teaches you how to
- Set Up Google Play Services
- Specify App Permissions
- Create a Location Services Client
- Get the Last Known Location
Try it out
Using the Google Play services location APIs, your app can request the last known location of the user's device. In most cases, you are interested in the user's current location, which is usually equivalent to the last known location of the device.
Specifically, use the fused location provider to retrieve the device's last known location. The fused location provider is one of the location APIs in Google Play services. It manages the underlying location technology and provides a simple API so that you can specify requirements at a high level, like high accuracy or low power. It also optimizes the device's use of battery power.
This lesson shows you how to make a single request for the location of a
device using the
getLastLocation()
method in the fused location provider.
Set Up Google Play Services
To access the fused location provider, your app's development project must include Google Play services. Download and install the Google Play services component via the SDK Manager and add the library to your project. For details, see the guide to Setting Up Google Play Services.
Specify App Permissions
Apps that use location services must request location permissions. Android
offers two location permissions:
ACCESS_COARSE_LOCATION
and
ACCESS_FINE_LOCATION.
The permission you choose determines the accuracy of the location returned by
the API. If you specify
ACCESS_COARSE_LOCATION,
the API returns a location with an accuracy approximately equivalent to a city
block.
This lesson requires only coarse location. Request this permission with the
uses-permission element in your app manifest, as the following code
snippet shows:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.android.gms.location.sample.basiclocationsample" >
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
</manifest>
Create Location Services Client
In your activity's onCreate() method,
create an instance of the Fused Location Provider Client as the following code snippet shows.
private FusedLocationProviderClient mFusedLocationClient;
// ..
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}
Get the Last Known Location
Once you have created the Location Services client
you can get the last known location of a user's device. When your app is
connected to these you can use the fused location provider's
getLastLocation()
method to retrieve the device location. The precision of the location returned
by this call is determined by the permission setting you put in your app
manifest, as described in the Specify App
Permissions section of this document.
To request the last known location, call the
getLastLocation()
method. The following code snippet illustrates the request and a simple handling of the
response:
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// Got last known location. In some rare situations this can be null.
if (location != null) {
// ...
}
}
});
The
getLastLocation()
method returns a Task
that will result in a
Location
object from which you can retrieve the latitude and longitude coordinates of a
geographic location. The location object may be null in rare cases
when the location is not available.
The next lesson, Changing Location Settings, shows you how to detect the current location settings, and prompt the user to change settings as appropriate for your app's requirements.