Introduction
This tip is about using Google Maps v2 services and GPS in Android.
Background
Please refer to the below mentioned article to setup your eproject in Android Studio.
Using the Code
The first thing you need to make before use Google maps v2 is get a key for Google:
Set this Key in your Android manifest file:
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/google_maps_key" />
<string name="google_maps_key"
templateMergeStrategy="preserve">...your key ...</string>
After that, you can use class com.google.android.gms.maps.GoogleMap.
The steps to use GoogleMaps are:
- Create a view activity_main.xml:
="1.0"="utf-8"
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/mainView">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
- Create activity MainActivity.java, and reference to
@+id/map:
private GoogleMap googleMap;
if (googleMap == null) {
googleMap = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
if (googleMap == null) {
Toast.makeText(getApplicationContext(),
"Sorry! unable to create maps", Toast.LENGTH_SHORT).show();
}
else {
}
}
The Toast.makeText action shows a text indicating that the service of Google maps are not available.
The second thing is initialize the GPS:
To do this, we create a class (GpsLocation) that implements LocationListener to manage the logic of Gps.
We have a constructor, with the context and TextView to show Gps Status:
public GpsLocation(Context mContext, TextView gpsStatusTextView) {
this.mContext = mContext;
this.gpsStatusTextView = gpsStatusTextView;
getLocation();
}
A method getLocation that initializes the gps service and obtains gps location:
public Location getLocation() {
try {
locationManager = (LocationManager) mContext
.getSystemService(Context.LOCATION_SERVICE);
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
} else {
this.canGetLocation = true;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
This class has two attributes, latitude and longitude which are initialized in getLocation method.
In MainActivity, we get these values:
gpsLocation = new GpsLocation(this, gpsStatusTextView);
if (gpsLocation.canGetLocation()){
double longitude = gpsLocation.getLongitude();
double latitude = gpsLocation.getLatitude();
}
Points of Interest
History
- Version 1.0 - Published an initial version of the tip on 23/12/2014