Location-Based Services
       on Android



                   Jomar Tigcal
       GDG DevFest Bacolod 2012
              November 5, 2012
Jomar Tigcal
● Community Manager of GDG Philippines
● Mobile Apps Developer
● Software Engineer at Stratpoint
  Technologies, Inc.
● One of the developers of Moochfood

                      http://jomar.tigcal.com
                          jomar@tigcal.com
                                @jomartigcal
Moochfood
                   Moochfood      is    an
                   Android     application
                   that allows you to
                   record, rate and share
                   dining experiences.




      http://www.moochfood.com/
Location
Challenges
● Obtaining user location can consume a lot of
  battery
● Getting location takes some time
● Because the user location changes, you
  must account for movement by re-estimating
  user location every so often.
● Location estimates from each source may
  not be accurate.
android.location
              Android provides a location
              framework        that    your
              application can use to
              determine      the    device's
              location and bearing and
              register for updates.

              http://developer.android.
              com/reference/android/locat
              ion/package-summary.html
Android Permissions
● ACCESS_COARSE_LOCATION
  -> Network Provider: cell tower and Wi-Fi
  signals

● ACCESS_FINE_LOCATION
  -> GPS Provider
Android Permissions
Note:
If you are using both NETWORK_PROVIDER
and GPS_PROVIDER, then you need to
request only the ACCESS_FINE_LOCATION
permission, because it includes permission for
both.
Android Location API
● Location
  A class representing a geographic location sensed
  at a particular time.

● LocationManager
  This class provides access to the system location
  services.

● LocationListener
  Interface used for receiving notifications from the
  LocationManager when the location has changed.
Getting User Location




                  Image Source: http://evalblog.com/2011/06/06/where-am-i/
Getting User Location
● Create an instance of LocationManager
  Location locationManager =
  (LocationManager) this.getSystemService
  (Context.LOCATION_SERVICE);
● Check Location Provider
  final boolean gpsEnabled =
  locationManager.isProviderEnabled
  (LocationManager.GPS_PROVIDER);
Getting User Location

● Start listening for location updates
  locationManager.requestLocationUpdates
  (LocationManager.GPS_PROVIDER, 0, 0,
  locationListener);

● Stop listening for location updates
  locationManager.removeUpdates(this);
Getting User Location
Getting User Location
Getting User Location
What's next?
Commonly used APIs




         Image Sources: http://developer.foursquare.com and http://thegreasywiener.com/
Google Places API (https:
  //developers.google.
      com/places/)
Google Places API
● Place Searches return a list of Places based on
  a user's location or search string.
● Place Details requests return more detailed
  information about a specific Place, including user
  reviews.
● Place Actions allow you to supplement the data
  in Google's Places Database with data from your
  application. You can schedule Events, add and
  remove Places, or weight Place rankings from
  user activity with Place Bumps.
Google Places API
● Places Autocomplete can be used to provide
  autocomplete functionality for text-based
  geographic searches, by returning Places as
  you type.
● Query Autocomplete can be used to provide a
  query prediction service for text-based
  geographic searches, by returning suggested
  queries as you type.
Getting API Key
● Go to Google APIs console (http://code.
  google.com/apis/console)
● Create an API Project
● Select Services
● Turn on Places API
Places Search
● Nearby Search
  by location (latitude, longitude)

● Text Search
  by search query
  (e.g. "pizza in Bacolod")
Nearby Search Syntax

Syntax:
https://maps.googleapis.
com/maps/api/place/nearbysearch/output?
parameters

Output: Either json or xml
Nearby Search Required Parameters
● key
  API Key
● location
  latitude, longitude
● radius
  distance in meters, maximum of 50, 000 m
● sensor (true/false)
  if request came from location sensor (GPS)
Nearby Search Optional Parameters
keyword -         content
language -        language code
name        -     name
rankby      -     prominence or distance
*if rankby=distance, radius should not be included

types
pagetoken
Place Search Types
Separated by |

Examples:
food     restaurant   convenience_store
hospital school       grocery_or_supermarket

More at:
https://developers.google.
com/places/documentation/supported_types
Example
● Place Search:
https://maps.googleapis.
com/maps/api/place/nearbysearch/json?
location=loc_here&sensor=true&radius=500&ke
y=key_here
● Type=food
https://maps.googleapis.
com/maps/api/place/nearbysearch/json?
location=loc_here&sensor=true&radius=500&typ
es=food&key=key_here
Foursquare API (https:
//developer.foursquare.
         com)
Foursquare API
Core API: Check in, view their history, see where
their friends are, create tips and lists, search for
and learn more about venues, and access specials
and recommendations.

Real-time API: Venue push API notifies venue
managers when users check in to their venues,
and our user push API notifies developers when
their users check in anywhere.
Foursquare API
Merchant Platform: Allows developers to write
applications that help registered venue owners
manage their foursquare presence and
specials.

Venues Platform: Search for places and access
a wealth of information about them, including
addresses, popularity, tips, and photos.
Foursquare Venues Search
Search Foursquare database and find
information including tips, photos, check-in
counts, and here now

Syntax:

https://api.foursquare.com/v2/venues/search
Venues Search Parameters
Required Parameters:

● ll (latitude, longitude) - user's location
  or
● near (text) - place where to search

● v (YYYYMMDD) indicates that the client is
  up to date as of the specified date
Venues Search Parameters
Optional Parameters:

●   query - name of place to search
●   limit - number of results (max is 50)
●   radius - distance in meters (max is 10,000)
●   categoryId - comma-separated categories to
    limit search
Foursquare Demo
HTTP Request:
https://api.foursquare.com/v2/venues/search?
ll=40.7,-74
&oauth_token=0445ZMNU5XS4JDAURLRE3M
ARL222RVJITL2XBKF0CR1C2EWR&v=20121
102

Android Project:
  * Sample Android Project is available at
  https://github.com/jomartigcal/lbs-android-
  sample
Foursquare Demo
Google Places API Challenge 2012
http://developers.google.com/places/challenge/




  Deadline: November 30, 2012
Foursquare Hack Day Philippines
      http://hackday.webgeek.ph/




       December 1, 2012
Resources
● http://developer.android.
  com/reference/android/location/package-
  summary.html
● http://developer.android.
  com/guide/topics/location/index.html
● https://developers.google.com/places/
● https://developer.foursquare.com
● https://github.com/jomartigcal/lbs-android-
  sample
Questions?




             Image Source: http://www.smoblog.com/
Thank you very much!
Location-Based Services
       on Android



                   Jomar Tigcal
       GDG DevFest Bacolod 2012
              November 5, 2012

Location-Based Services on Android

  • 1.
    Location-Based Services on Android Jomar Tigcal GDG DevFest Bacolod 2012 November 5, 2012
  • 2.
    Jomar Tigcal ● CommunityManager of GDG Philippines ● Mobile Apps Developer ● Software Engineer at Stratpoint Technologies, Inc. ● One of the developers of Moochfood http://jomar.tigcal.com jomar@tigcal.com @jomartigcal
  • 3.
    Moochfood Moochfood is an Android application that allows you to record, rate and share dining experiences. http://www.moochfood.com/
  • 4.
  • 5.
    Challenges ● Obtaining userlocation can consume a lot of battery ● Getting location takes some time ● Because the user location changes, you must account for movement by re-estimating user location every so often. ● Location estimates from each source may not be accurate.
  • 6.
    android.location Android provides a location framework that your application can use to determine the device's location and bearing and register for updates. http://developer.android. com/reference/android/locat ion/package-summary.html
  • 7.
    Android Permissions ● ACCESS_COARSE_LOCATION -> Network Provider: cell tower and Wi-Fi signals ● ACCESS_FINE_LOCATION -> GPS Provider
  • 8.
    Android Permissions Note: If youare using both NETWORK_PROVIDER and GPS_PROVIDER, then you need to request only the ACCESS_FINE_LOCATION permission, because it includes permission for both.
  • 9.
    Android Location API ●Location A class representing a geographic location sensed at a particular time. ● LocationManager This class provides access to the system location services. ● LocationListener Interface used for receiving notifications from the LocationManager when the location has changed.
  • 10.
    Getting User Location Image Source: http://evalblog.com/2011/06/06/where-am-i/
  • 11.
    Getting User Location ●Create an instance of LocationManager Location locationManager = (LocationManager) this.getSystemService (Context.LOCATION_SERVICE); ● Check Location Provider final boolean gpsEnabled = locationManager.isProviderEnabled (LocationManager.GPS_PROVIDER);
  • 12.
    Getting User Location ●Start listening for location updates locationManager.requestLocationUpdates (LocationManager.GPS_PROVIDER, 0, 0, locationListener); ● Stop listening for location updates locationManager.removeUpdates(this);
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
    Commonly used APIs Image Sources: http://developer.foursquare.com and http://thegreasywiener.com/
  • 18.
    Google Places API(https: //developers.google. com/places/)
  • 19.
    Google Places API ●Place Searches return a list of Places based on a user's location or search string. ● Place Details requests return more detailed information about a specific Place, including user reviews. ● Place Actions allow you to supplement the data in Google's Places Database with data from your application. You can schedule Events, add and remove Places, or weight Place rankings from user activity with Place Bumps.
  • 20.
    Google Places API ●Places Autocomplete can be used to provide autocomplete functionality for text-based geographic searches, by returning Places as you type. ● Query Autocomplete can be used to provide a query prediction service for text-based geographic searches, by returning suggested queries as you type.
  • 21.
    Getting API Key ●Go to Google APIs console (http://code. google.com/apis/console) ● Create an API Project ● Select Services ● Turn on Places API
  • 22.
    Places Search ● NearbySearch by location (latitude, longitude) ● Text Search by search query (e.g. "pizza in Bacolod")
  • 23.
  • 24.
    Nearby Search RequiredParameters ● key API Key ● location latitude, longitude ● radius distance in meters, maximum of 50, 000 m ● sensor (true/false) if request came from location sensor (GPS)
  • 25.
    Nearby Search OptionalParameters keyword - content language - language code name - name rankby - prominence or distance *if rankby=distance, radius should not be included types pagetoken
  • 26.
    Place Search Types Separatedby | Examples: food restaurant convenience_store hospital school grocery_or_supermarket More at: https://developers.google. com/places/documentation/supported_types
  • 27.
    Example ● Place Search: https://maps.googleapis. com/maps/api/place/nearbysearch/json? location=loc_here&sensor=true&radius=500&ke y=key_here ●Type=food https://maps.googleapis. com/maps/api/place/nearbysearch/json? location=loc_here&sensor=true&radius=500&typ es=food&key=key_here
  • 28.
  • 29.
    Foursquare API Core API:Check in, view their history, see where their friends are, create tips and lists, search for and learn more about venues, and access specials and recommendations. Real-time API: Venue push API notifies venue managers when users check in to their venues, and our user push API notifies developers when their users check in anywhere.
  • 30.
    Foursquare API Merchant Platform:Allows developers to write applications that help registered venue owners manage their foursquare presence and specials. Venues Platform: Search for places and access a wealth of information about them, including addresses, popularity, tips, and photos.
  • 31.
    Foursquare Venues Search SearchFoursquare database and find information including tips, photos, check-in counts, and here now Syntax: https://api.foursquare.com/v2/venues/search
  • 32.
    Venues Search Parameters RequiredParameters: ● ll (latitude, longitude) - user's location or ● near (text) - place where to search ● v (YYYYMMDD) indicates that the client is up to date as of the specified date
  • 33.
    Venues Search Parameters OptionalParameters: ● query - name of place to search ● limit - number of results (max is 50) ● radius - distance in meters (max is 10,000) ● categoryId - comma-separated categories to limit search
  • 34.
  • 35.
  • 36.
    Google Places APIChallenge 2012 http://developers.google.com/places/challenge/ Deadline: November 30, 2012
  • 37.
    Foursquare Hack DayPhilippines http://hackday.webgeek.ph/ December 1, 2012
  • 38.
    Resources ● http://developer.android. com/reference/android/location/package- summary.html ● http://developer.android. com/guide/topics/location/index.html ● https://developers.google.com/places/ ● https://developer.foursquare.com ● https://github.com/jomartigcal/lbs-android- sample
  • 39.
    Questions? Image Source: http://www.smoblog.com/
  • 40.
  • 41.
    Location-Based Services on Android Jomar Tigcal GDG DevFest Bacolod 2012 November 5, 2012