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