The Location Object
S.N. | Method & Description |
---|---|
1 | float distanceTo(Location dest) Returns the approximate distance in meters between this location and the given location. |
2 | float getAccuracy() Get the estimated accuracy of this location, in meters. |
3 | double getAltitude() Get the altitude if available, in meters above sea level. |
4 | float getBearing() Get the bearing, in degrees. |
5 | double getLatitude() Get the latitude, in degrees. |
6 | double getLongitude() Get the longitude, in degrees. |
7 | float getSpeed() Get the speed if it is available, in meters/second over ground. |
8 | boolean hasAccuracy() True if this location has an accuracy. |
9 | boolean hasAltitude() True if this location has an altitude. |
10 | boolean hasBearing() True if this location has a bearing. |
11 | boolean hasSpeed() True if this location has a speed. |
12 | void reset() Clears the contents of the location. |
13 | void setAccuracy(float accuracy) Set the estimated accuracy of this location, meters. |
14 | void setAltitude(double altitude) Set the altitude, in meters above sea level. |
15 | void setBearing(float bearing) Set the bearing, in degrees. |
16 | void setLatitude(double latitude) Set the latitude, in degrees. |
17 | void setLongitude(double longitude) Set the longitude, in degrees. |
18 | void setSpeed(float speed) Set the speed, in meters/second over ground. |
19 | String toString() Returns a string containing a concise, human-readable description of this object. |
Get the Current Location
-
GooglePlayServicesClient.ConnectionCallbacks
-
GooglePlayServicesClient.OnConnectionFailedListener
S.N. | Callback Methods & Description |
---|---|
1 | abstract void onConnected(Bundle connectionHint) This callback method is called when location service is connected to the location client successfully. You will use connect() method to connect to the location client. |
2 | abstract void onDisconnected() This callback method is called when the client is disconnected. You will use disconnect()method to disconnect from the location client. |
3 | abstract void onConnectionFailed(ConnectionResult result) This callback method is called when there was an error connecting the client to the service. |
You should create the location client in onCreate() method of your activity class, then connect it in onStart(), so that Location Services maintains the current location while your activity is fully visible. You should disconnect the client in onStop() method, so that when your app is not visible, Location Services is not maintaining the current location. This helps in saving battery power up-to a large extent.
Get the Updated Location
S.N. | Callback Method & Description |
---|---|
1 | abstract void onLocationChanged(Location location) This callback method is used for receiving notifications from the LocationClient when the location has changed. |
Location Quality of Service
S.N. | Method & Description |
---|---|
1 | setExpirationDuration(long millis) Set the duration of this request, in milliseconds. |
2 | setExpirationTime(long millis) Set the request expiration time, in millisecond since boot. |
3 | setFastestInterval(long millis) Explicitly set the fastest interval for location updates, in milliseconds. |
4 | setInterval(long millis) Set the desired interval for active location updates, in milliseconds. |
5 | setNumUpdates(int numUpdates) Set the number of location updates. |
6 | setPriority(int priority) Set the priority of the request. |
Activities should strongly consider removing all location request when entering the background (for example at onPause()), or at least swap the request to a larger interval and lower quality to save power consumption.
Displaying a Location Address
Example
To experiment with this example, you will need actual Mobile device equipped with latest Android OS, otherwise you will have to struggle with emulator which may not work.
INSTALL THE GOOGLE PLAY SERVICES SDK
Steps | Description |
---|---|
1 | Launch the SDK Manager.
|
2 | Search for Google Play services option from the given package list under Extra and if its not installed, then install it. The Google Play services SDK is saved in your Android SDK environment at <android-sdk>/extras/google/google_play_services/. |
3 | Copy the library project at <android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/ to the location where you maintain your Android app projects. If you are using Eclipse, import the library project into your workspace. Click File > Import, select Android > Existing Android Code into Workspace, and browse to <android-sdk>/extras/google/google_play_services/libproject/, library project to import it. |
CREATE ANDROID APPLICATION
Step | Description |
---|---|
1 | You will use Eclipse IDE to create an Android application and name it as LBSDemo/i> under a package com.example.lbsdemo. While creating this project, make sure you Target SDK andCompile With at the latest version of Android SDK to use higher levels of APIs. |
2 | Add Google Play Service library in your project by following simple steps given below. |
3 | Modify src/MainActivity.java file and add required code as shown below to take care of getting current location and its equivalent address. |
4 | Modify layout XML file res/layout/activity_main.xml to add all GUI components which include three buttons and two text views to show location/address. |
5 | Modify res/values/strings.xml to define required constant values |
6 | Modify AndroidManifest.xml as shown below |
7 | Run the application to launch Android emulator and verify the result of the changes done in the aplication. |
package com.example.lbsdemo; import java.io.IOException; import java.util.List; import java.util.Locale; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GooglePlayServicesClient; import com.google.android.gms.location.LocationClient; import android.content.Context; import android.location.Address; import android.location.Geocoder; import android.location.Location; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends FragmentActivity implements GooglePlayServicesClient.ConnectionCallbacks, GooglePlayServicesClient.OnConnectionFailedListener { LocationClient mLocationClient; private TextView addressLabel; private TextView locationLabel; private Button getLocationBtn; private Button disconnectBtn; private Button connectBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); locationLabel = (TextView) findViewById(R.id.locationLabel); addressLabel = (TextView) findViewById(R.id.addressLabel); getLocationBtn = (Button) findViewById(R.id.getLocation); getLocationBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { displayCurrentLocation(); } }); disconnectBtn = (Button) findViewById(R.id.disconnect); disconnectBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { mLocationClient.disconnect(); locationLabel.setText("Got disconnected...."); } }); connectBtn = (Button) findViewById(R.id.connect); connectBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { mLocationClient.connect(); locationLabel.setText("Got connected...."); } }); // Create the LocationRequest object mLocationClient = new LocationClient(this, this, this); } @Override protected void onStart() { super.onStart(); // Connect the client. mLocationClient.connect(); locationLabel.setText("Got connected...."); } @Override protected void onStop() { // Disconnect the client. mLocationClient.disconnect(); super.onStop(); locationLabel.setText("Got disconnected...."); } @Override public void onConnected(Bundle dataBundle) { // Display the connection status Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show(); } @Override public void onDisconnected() { // Display the connection status Toast.makeText(this, "Disconnected. Please re-connect.", Toast.LENGTH_SHORT).show(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { // Display the error code on failure Toast.makeText(this, "Connection Failure : " + connectionResult.getErrorCode(), Toast.LENGTH_SHORT).show(); } public void displayCurrentLocation() { // Get the current location's latitude & longitude Location currentLocation = mLocationClient.getLastLocation(); String msg = "Current Location: " + Double.toString(currentLocation.getLatitude()) + "," + Double.toString(currentLocation.getLongitude()); // Display the current location in the UI locationLabel.setText(msg); // To display the current address in the UI (new GetAddressTask(this)).execute(currentLocation); } /* * Following is a subclass of AsyncTask which has been used to get * address corresponding to the given latitude & longitude. */ private class GetAddressTask extends AsyncTask<Location, Void, String>{ Context mContext; public GetAddressTask(Context context) { super(); mContext = context; } /* * When the task finishes, onPostExecute() displays the address. */ @Override protected void onPostExecute(String address) { // Display the current address in the UI addressLabel.setText(address); } @Override protected String doInBackground(Location... params) { Geocoder geocoder = new Geocoder(mContext, Locale.getDefault()); // Get the current location from the input parameter list Location loc = params[0]; // Create a list to contain the result address List<Address> addresses = null; try { addresses = geocoder.getFromLocation(loc.getLatitude(), loc.getLongitude(), 1); } catch (IOException e1) { Log.e("LocationSampleActivity", "IO Exception in getFromLocation()"); e1.printStackTrace(); return ("IO Exception trying to get address"); } catch (IllegalArgumentException e2) { // Error message to post in the log String errorString = "Illegal arguments " + Double.toString(loc.getLatitude()) + " , " + Double.toString(loc.getLongitude()) + " passed to address service"; Log.e("LocationSampleActivity", errorString); e2.printStackTrace(); return errorString; } // If the reverse geocode returned an address if (addresses != null && addresses.size() > 0) { // Get the first address Address address = addresses.get(0); /* * Format the first line of address (if available), * city, and country name. */ String addressText = String.format( "%s, %s, %s", // If there's a street address, add it address.getMaxAddressLineIndex() > 0 ? address.getAddressLine(0) : "", // Locality is usually a city address.getLocality(), // The country of the address address.getCountryName()); // Return the text return addressText; } else { return "No address found"; } } }// AsyncTask class }
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/getLocation" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/get_location"/> <Button android:id="@+id/disconnect" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/disconnect"/> <Button android:id="@+id/connect" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/connect"/> <TextView android:id="@+id/locationLabel" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TextView android:id="@+id/addressLabel" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">LBSDemo</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="get_location">Get Location</string> <string name="disconnect">Disconnect Service</string> <string name="connect">Connect Service</string> </resources>
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.lbsdemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.lbsdemo.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
![Eclipse Run Icon](https://i0.wp.com/www.tutorialspoint.com/android/images/eclipse_run.png)