2. l
l
l
Maps
Google Maps API is widely used on the web
The Android SDK provides support for easily
integrating the Google Maps API
3. l
l
l
Using Google Maps in our apps
Configure
l Maps require the Google API as the project build
target
l Maps require a Map API Key in order to be
deployed
l http://code.google.com/android/add-ons/googleapis/maps-overview.html
Code
l Create a MapView in a MapActivity
l Create Map Overlays
4. l
Add Google API in Eclipse
• http://developer.android.com/sdk/adding-components.html
5. l
l
Add Google API in Eclipse
Use API 4 for SDK 1.6
– http://developer.android.com/guide/appendix/api-levels.html
6. l
l
Add Google API in Eclipse
Set the Google API as the Project Build Target
l Right-click on the project, select Properties
7. l
l
•
l
l
Keys
As we learned in lab 1 section 6,
– https://sites.google.com/site/androidappcourse/labs/lab-1
our apps must be signed in order to deploy them
on a device
Eclipse automatically creates a signed debug
keystore that is used when launching our app from
Eclipse
In order to deploy our app to the public, we must
create a signed keystore
– See http://developer.android.com/guide/publishing/appsigning.html#ExportWizard
12. l
Add the Map API Key to your
Application
• <com.google.android.maps.MapView
•
android:id="@+id/myMap"
•
android:layout_width="fill_parent"
•
android:layout_height="fill_parent"
•
android:clickable="true"
•
android:apiKey="@string/mapApiKey"/>
13. l
l
l
What’s in the legal agreement?
Read the Terms of Service (sections 1-11)
l http://code.google.com/android/maps-api-signup.html
Examples
l Maps may include ads in future
l Google may limit number of transactions
l Cannot use for turn-by-turn directions or autonomous driving
15. l
l
Finally, we can start coding
MapView
l Contains a map
l via Google Maps API
l Map tile retrieval and caching is all done for
you
l Includes pan
l Includes zoom
l use setBuiltInZoomControls(true);
16. l
l
MapActivity
MapView can only be constructed or inflated in a
MapActivity
• public class MyActivity extends MapActivity {
•…
• @Override
• public void onCreate(Bundle savedInstanceState) {
•
super.onCreate(savedInstanceState);
•
…
•
MapView myMap = (MapView)findViewById(R.id.myMap);
•
myMap.setBuiltInZoomControls();
•
myMap.setSatellite(true);
18. l
l
•
•
•
•
•
•
•
MapController
You can pan and zoom the map programmatically
MapView myMap = (MapView)findViewById(R.id.myMap);
MapController mapController = myMap.getController();
mapController.setZoom(1); //widest zoom/far away
…
mapController.setZoom(21); //narrowest zoom/close in
mapController.zoomIn(); //one level
mapController.zoomOut(); //one level
19. l
l
GeoPoint
You can move to a particular point
•
•
MapView myMap = (MapView)findViewById(R.id.myMap);
MapController mapController = myMap.getController();
•
•
•
•
•
•
Double lat = 37.123456 * 1E6;
Double long = -122.123456 * 1E6;
GeoPoint point = new GeoPoint(lat.intValue(), long.intValue());
mapController.setCenter(point); //jump to point
…
mapController.animateTo(point); //smooth transition to point
21. l
l
Forward Geocoding
Find longitude/latitude (and more) from address
•
•
•
•
•
•
•
•
Geocoder gc = new Geocoder(this, Locale.US);
List<Address> addresses = null;
try {
addresses = gc.getFromLocationName(
“123 Main St., Newton, Kansas”, 10);
} catch (IOException e) {}
double lat = addresses.get(0).getLatitude();
String zip = addresses.get(0).getPostalCode();
22. l
l
Geolocation
Options
l GPS, cell network
l Wifi-based
l Skyhook Wireless
l http://www.skyhookwireless.com/developers/Android_Integration_M
anual.php
23. l
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Setting up location services
public MyActivity() {
criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setCostAllowed(true);
criteria.setPowerRequirement(Criteria.POWER_LOW);
};
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
updateWithNewLocation(location);
}
public void onProviderDisabled(String provider) {
updateWithNewLocation(null);
}
public void onProviderEnabled(String provider) {}
public void onStatusChanged(String provider, int status, Bundle extras) {}
};
24. •
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
@Override
protected void onStart() {
super.onStart();
locationManager = (LocationManager)getSystemService(
Context.LOCATION_SERVICE);
provider = locationManager.getBestProvider(criteria, true);
// or could be LocationManager.GPS_PROVIDER
try {
updateWithNewLocation(locationManager.getLastKnownLocation(
provider));
} catch (Exception e) {}
locationManager.requestLocationUpdates(provider, 2000, 10,
locationListener);
}
private void updateWithNewLocation(Location location) {
double latitude = 0.0;
double longitude = 0.0;
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
//do something with latitude and longitude (e.g. print or move map there)
}
25. l
•
•
•
•
•
•
•
•
•
Turn GPS on and off to save battery
@Override
protected void onPause() {
super.onPause();
//stop receiving GPS locationManager.removeUpdates(locationListener);
}
@Override
protected void onResume() {
super.onResume();
//restart receiving GPS locationManager.requestLocationUpdates(provider,
2000, 10,
•
locationListener);
• }