Make richer location-aware Android software with the Gp API


Yahoo Play Service’s Location APIs give you the of showing the user’s current site, but there is only a whole lot value you can aquire out of some sort of “ You might be Here” -style marker on the Google Chart! The Gp API may be a powerful device which can put an extra part of operation to your location-aware apps by providing you use of detailed details about a huge range of spots, located all over the globe.

You need to use this information because basis for any kind of functionality. You may add a Facebook-style check-in characteristic to your application, or generate an software that permits users surf all the take-out spots that’ll deliver with their current area.

Even if you consider the classic location-aware example of the navigation application, cross-referencing consumer queries in opposition to a listing of places indicates users would not always have to full avenue addresses. To be able to ask “can you let me see the best route to the particular Googleplex? ” is a more practical user knowledge than “can you let me see the swiftest route to 1600 Amphitheatre Parkway, Mountain Check out? ”

On this page we’ll use the Gp API to produce a location-aware software where the end user can discover and collect information about attractions in their quick area, and anywhere in the world.

Might be Google Places free of charge?

Yes, nonetheless it’ ring complicated — especially if youre using various other APIs in the project.

The particular Google Places API for Google android is liberated to use, although limited to a single, 000 demands per twenty four hours by default. When you’ve installation this API, you can keep track of how many asks for it’s absorbing in the Search engines API Unit. Your application will start to are unsuccessful if it at any time exceeds a single, 000 needs in a overnight period. Should your project will be approaching this specific limit you will need to raise your quota.

You could increase the restrict to a hundred and fifty, 000 demands per 1 day, free of charge, simply by creating a payment profile within the Google API Console. This involves you to get into your credit credit card details together with mark the particular project when billable. Even though Google Places API is liberated to use, right now your entire task is billable. If you use virtually any billable APIs in your task, you may be incurred based on their own usage.

Should you be using any APIs, cautiously check their own documentation together with terms and conditions just before increasing your Gp limit.

In case you get caught out there, you can eliminate billing anytime in the Invoicing pane. This can restrict your APIs for their courtesy consumption limit, in addition to you’ll not be charged for almost any APIs through this project.

Are you experiencing the latest rendition of Search engines Play Solutions?

With that palinode out of the way, shall we create each of our application! The first thing is be sure you have the more recent version of Yahoo Play providers installed:

  • Launch Google android Studio’s SDK Manager.
  • Find the SDK Resources tabs.
  • Find ‘Google Play services’ and set up any accessible updates.

Get your project’s fingerprint

Produce a new job with the options of your choice, making use of the Empty Task design.

In order to easy access the Gp API, you have to generate a good API main with Google android restrictions. This simply means linking the particular API step to your project’s package identify and license fingerprint (SHA-1).

There’s quite a few ways to get your project’s SHA-1 finger-print, but the easiest way is with the Gradle System :

  • Select the Gradle tabs along the right hand side of your Android Business window.
  • Choose your application’s root, accompanied by Tasks > Android > signingReport .

  • Available the Gradle Console tab of which appears to get the bottom-right belonging to the screen.
  • Typically the Gradle Gaming console will available automatically. Obtain the SHA-1 price in this screen, and make some it.

We’re making use of the debug document fingerprint, that is generated quickly when you generate a debug establish. This document is only appropriate for testing your current applications, and before publishing a good app it is recommended to generate a fresh API major based on the relieve certificate.

Making your API key

Wide open a web internet browser, and complete the examples below steps:

  • Head to typically the Google API Console.
  • Develop a new job by hitting the API Project item inside the menu standard, and then picking the & key.
  • Give your job a term, and then click on Create .
  • Click Permit APIs in addition to Services and select Gp API for the purpose of Android .
  • Read the onscreen information, if you’re thrilled to proceed next click Allow .
  • Choose Credentials from the left-hand menu, and next select Make credentials > API key element .
  • Simply click Restrict primary .
  • Pick Android applications , and click Put package brand and finger-print .
  • Substance your project’s SHA-1 finger-print and bundle name in to the subsequent areas. If you’re not sure about the program name, you will find these details in your project’s Manifest.
  • Just click Save .
  • Back in the Experience display screen, find the API key you simply created, together with copy that.
  • Switch back in Android Business and insert the API key with your project’s Show itself. While we certainly have the Show open, Im also putting the ACCESS_FINE_LOCATION permission, which often our software will need to obtain a lock within the device’s spot:
 <? xml version="1. 0" encoding="utf-8"? > < manifest xmlns: android="" package="com. jessicathornsby. myapplication"> //Add typically the ACCESS_FINE_LOCATION permission// < uses-permission android: name="android. permission. ACCESS_FINE_LOCATION" /> < application android os: allowBackup="true" android os: icon="@mipmap/ic_launcher" android os: label="@string/app_name" android os: roundIcon="@mipmap/ic_launcher_round" google android: supportsRtl="true" google android: theme="@style/AppTheme"> //Add your API key. Be sure to replace the “YOUR_API_KEY_HERE” text! // < meta-data android: name="com. google. android os. geo. API_KEY" android: value="YOUR_API_KEY_HERE"/> < exercise android: name=". MainActivity"> < intent-filter> < action android os: name="android. purpose. action. MAIN" /> < category android os: name="android. objective. category. LAUNCHER" /> < /intent-filter> < /activity> < /application> < /manifest> 

Put the Areas API as the project habbit

Open your project’s module-level create. gradle data file and add the newest version in the Google Places API as a addiction:

 dependencies benefits implementation fileTree(dir: 'libs', consist of: ['*.jar']) enactment 'com. google android. support: appcompat-v7: 26. one 0' execution 'com. yahoo. android. gms: play-services-places: 10. 8. 0'......... 

Picking a spot: Creating the layout

The particular Google Places API includes a ready-made place trader widget, that can form the foundation our software.

The destination picker exhibits this kind of data:

  • Typically the device’s spot on an online Google Chart.
  • Nearby attractions, shown seeing that markers for the map.
  • A directory of nearby areas.
  • A Search bar.

When picking out a place, the particular dialog offers you several choices:

  • Move around the Google-maps fragment, and even tap some of the place guns.
  • Tap some of the places that will appear in the particular Choose a near by place list. This specific list is not tied to typically the user’s present location, when they move around the chart, the list might update to show different areas.
  • Tap typically the “ Power by Google” search standard and form the name or even address belonging to the place in store. The research bar has got built-in autocomplete support, and so it’ll screen a list of recommended places using the text you have entered up to now.

Yourself a place you intend to learn more about, give me it a faucet and pick Select from the pop up that looks. The place trader reacts by simply creating a Location object which contains a range of facts. In our use, we’re likely to retrieve the particular place’s brand and home address, and show that information about a following screen.

Utilizing the ready-made spot picker discussion, you make certain your application is definitely consistent with almost every other app that has this discussion, including Google’s own apps. This steadiness means many of your customers may quickly know how to connect to this section of your application, getting encountered this particular dialog very often before consist of applications. Making use of ready-made pieces wherever possible is just smart! Why spend time recreating operation that currently exists?

Once the user picks a location making use of the place trader, this info doesn’t persevere, so if that they rotate their very own device following selecting a place, the software will come back to its primary state.

We will be using the place trader widget programmatically, so inside our activity_main. xml file all of us just need to make this happen:

  • Supply the user a method to launch the area picker discussion.
  • Display title and home address of whatsoever place the customer selects within the place trader dialog. Issue information is not available, our own app will need to display the particular place’s lat. and long, values alternatively.
  • Provide the needed “ Driven by Google” attribution .

That previous point needs some reason. On every monitor where a great app utilizes data found from the Gp API, it should display whether Google Chart or “ Powered simply by Google” company logo.

Since we will be showing the place’s name and even address inside our activity_main. xml file, we should include a “ Powered by simply Google” emblem.

The Search engines Play solutions library delivers two variations of this photo:

  • To get light skills, use @drawable/powered_by_google_light
  • When it comes to dark backdrops, use @drawable/powered_by_google_dark

You can’ t resize or enhance these pictures in any way.

Add finished structure:

 <? xml version="1. 0" encoding="utf-8"? > < RelativeLayout xmlns: android="" xmlns: app="" xmlns: tools="" android: id="@+id/activity_main" android: layout_width="match_parent" android: layout_height="match_parent" android: paddingBottom="20dp" android: paddingLeft="20dp" android: paddingRight="20dp" android: paddingTop="20dp" tools: context="com. jessicathornsby. myapplication. MainActivity"> < TextView google android: id="@+id/placeName" android os: layout_width="wrap_content" android os: layout_height="wrap_content" google android: layout_alignParentTop="true" android os: text="Place Name" android: textSize="20sp" /> < TextView google android: id="@+id/placeAddress" android os: layout_width="wrap_content" google android: layout_height="wrap_content" google android: layout_below="@+id/placeName" android os: text="Address" google android: textSize="20sp" /> < Switch android: id="@+id/pickPlaceButton" android: layout_width="wrap_content" android: layout_height="wrap_content" android: layout_alignParentBottom="true" android: text="Pick a Place" /> < ImageView android os: id="@+id/imageView" android os: layout_width="wrap_content" google android: layout_height="wrap_content" android os: layout_alignParentBottom="true" android os: layout_alignParentEnd="true" android os: layout_marginEnd="23dp" software: srcCompat="@drawable/powered_by_google_light" /> < /RelativeLayout> 

Unveiling the Place Trader dialog

Inside our MainActivity , we need to complete the following:

  • Request the particular ACCESS_FINE_LOCATION agreement. We reported this agreement in our Express , in Android six. 0 in addition to higher programs need to require permissions when they’re necessary at runtime. If the customer denies the permission inquire, make sure they will understand the effect this will contain on the customer experience. When the user forbids the ACCESS_FINE_LOCATION permission, the app could respond by simply displaying some sort of toast.
  • Establish the place trader dialog, by simply passing a good Intent containing PlacePicker. IntentBuilder().
  • When the user chooses a place, the destination picker income a Place occasion. Our software needs to access this example, using the PlacePicker. getPlace() approach, and then draw out the necessary info i. elizabeth the place term and place addresses.
  • If the end user exits the destination picker while not selecting a location, display a mistake message.

Here’s the accomplished MainActivity :

 import google android. support. réflexion. NonNull; importance android. assistance. v4. software. ActivityCompat; importance android. assistance. v7. software. AppCompatActivity; importance android. operating-system. Build; transfer android. operating system. Bundle; transfer android. golf widget. Button; transfer android. written content. Intent; importance android. Reveal; import android os. content. pm hours. PackageManager; importance android. golf widget. TextView; importance android. golf widget. Toast; transfer android. viewpoint. View; importance com. search engines. android. gms. common. GooglePlayServicesNotAvailableException; import apresentando. google. android os. gms. well-known. GooglePlayServicesRepairableException; transfer com. search engines. android. gms. location. spots. Place; transfer com. yahoo. android. gms. location. areas. ui. PlacePicker; public category MainActivity stretches AppCompatActivity in front TextView placeName; TextView placeAddress; Button pickPlaceButton; private ultimate static int FINE_LOCATION sama dengan 100; privately owned final stationary int PLACE_PICKER_REQUEST = a single; @Override guarded void onCreate(Bundle savedInstanceState) in front super. onCreate(savedInstanceState); setContentView(R. design. activity_main); requestPermission(); placeName sama dengan (TextView) findViewById(R. id. placeName); placeAddress sama dengan (TextView) findViewById(R. id. placeAddress); pickPlaceButton sama dengan (Button) findViewById(R. id. pickPlaceButton); pickPlaceButton. setOnClickListener(new View. OnClickListener()  //Add a simply click handler that’ll start the destination picker// @Override public gap onClick(View view)  //Use PlacePicker. IntentBuilder() to construct a good Intent// PlacePicker. IntentBuilder designer = brand new PlacePicker. IntentBuilder(); try in front Intent intention = constructor. build(MainActivity. this); //Create some sort of PLACE_PICKER_REQUEST consistent that we will use to have the selected place// startActivityForResult(intent, PLACE_PICKER_REQUEST);  capture (GooglePlayServicesRepairableException e)  electronic. printStackTrace(); is parked , catch (GooglePlayServicesNotAvailableException e) benefits e. printStackTrace();  the particular ); the actual private emptiness requestPermission() in front //Check no matter if our software has the excellent location authorization, and request that if necessary// if (ActivityCompat. checkSelfPermission(this, Show itself. permission. ACCESS_FINE_LOCATION)! = PackageManager. PERMISSION_GRANTED) forward if (Build. VERSION. SDK_INT > sama dengan Build. VERSION_CODES. M) benefits requestPermissions(new Line[]Manifest. permission. ACCESS_FINE_LOCATION, FINE_LOCATION); various } various //Handle the consequence of the authorization request// @Override public gap onRequestPermissionsResult(int requestCode, @NonNull Chain[] permissions, @NonNull int[] grantResults)  very. onRequestPermissionsResult(requestCode, accord, grantResults); turn (requestCode) forward case FINE_LOCATION: if (grantResults[0]#@@#@!!! = PackageManager. PERMISSION_GRANTED) in front Toast. makeText(getApplicationContext(), "This application requires position permissions to be able to detect where you are! ", Bread toasted. LENGTH_LONG). show(); finish(); varied break; various  //Retrieve the results through the place trader dialog// @Override protected gap onActivityResult(int requestCode, int resultCode, Intent data)  //If the resultCode is ALL RIGHT... // should (resultCode == RESULT_OK) benefits //... subsequently retrieve the destination object, employing PlacePicker. getPlace()// Place spot = PlacePicker. getPlace(this, data); //Extract the particular place’s identify and screen it inside the TextView// placeName. setText(place. getName()); //Extract typically the place’s home address, and exhibit it within the TextView// placeAddress. setText(place. getAddress()); //If the consumer exited typically the dialog while not selecting a spot... // various else in cases where (resultCode == RESULT_CANCELED) forward //... and then display these toast// Toasted bread. makeText(getApplicationContext(), "No place selected", Toast. LENGTH_LONG). show(); the actual  the actual 

You can down load the complete Gp API use, minus the API key, by GitHub.

Diagnostic tests your application

Mount your project with an Android unit. As soon as you release the application, it should look for access to your region. Grant this specific request and after that tap typically the Pick a Location switch to establish the place trader dialog.

Pick a place making use of the place picker’s integrated Yahoo Map, record, or the look for bar, in addition to a Use this spot? discussion will appear. This particular dialog displays different details, depending on the spot you’ve chosen, ranging from typically the place’s phone owner’s name, address, in addition to photo, to some simple chain of GPS NAVIGATION coordinates in the event Google Places does not have any information with regards to your chosen spot.

If you want to make use of this place, tap into Select or pick a new spot by going Change site .

Once you have selected any, the activity_main layout may update to show the place’s name plus address, or even a string involving GPS heads if that will information is not available.

The other information can one display?

The advantage of the Spots API might be once you have retrieved a new Places target, the hard element is done! The app can easily extract many different information using this object:

  • getID . Typically the place’s calcado identifier. Your own app might use this information in order to uniquely discover a place, however, you typically will not display this specific ID towards the user.
  • getPhoneNumber . The place’s phone number.
  • getWebsiteUri . The place’s website, when known, as an example the website of a business or even school.
  • getLatLng . The place’s geographical heads.
  • getViewport . Some sort of viewport, went back as a LatLngBounds object.
  • getPlaceTypes . A list of the area types connected with this spot, such as TYPE_AIRPORT , TYPE_CLOTHING_STORE or TYPE_MOVIE_THEATER .
  • getLocale . The place for which title and solve are local.
  • getPriceLevel . Typically the place’s value level, including 0 (cheapest) to four (most expensive).
  • getRating . A good aggregated score, ranging from one 0 to five. 0.

Since each of our app currently has usage of the Spots object, we are able to display the above particulars, just by adjusting a few collections of procedure. Here we are displaying the product number plus price volume of the selected location:

 public school MainActivity expands AppCompatActivity in front TextView placePhone; TextView placePrice; Button pickPlaceButton; private ultimate static int FINE_LOCATION sama dengan 100; non-public final stationary int PLACE_PICKER_REQUEST = just one; @Override safe void onCreate(Bundle savedInstanceState) forward super. onCreate(savedInstanceState); setContentView(R. structure. activity_main); requestPermission(); placePrice sama dengan (TextView) findViewById(R. id. placePrice); placePhone= (TextView) findViewById(R. identity. placePhone); pickPlaceButton = (Button) findViewById(R. identification. pickPlaceButton); pickPlaceButton. setOnClickListener(new Viewpoint. OnClickListener() in front @Override general population void onClick(View view) benefits PlacePicker. IntentBuilder builder sama dengan new PlacePicker. IntentBuilder(); try out  Purpose intent sama dengan builder. build(MainActivity. this); startActivityForResult(intent, PLACE_PICKER_REQUEST); the actual catch (GooglePlayServicesRepairableException e) in front e. printStackTrace();  capture (GooglePlayServicesNotAvailableException e)  age. printStackTrace(); the particular  }); } privately owned void requestPermission()  in case (ActivityCompat. checkSelfPermission(this, Manifest. authorization. ACCESS_FINE_LOCATION)! sama dengan PackageManager. PERMISSION_GRANTED)  in the event that (Build. VARIETY. SDK_INT > = Make. VERSION_CODES. M)  requestPermissions(new String[]Manifest. authorization. ACCESS_FINE_LOCATION, FINE_LOCATION);  various  @Override public emptiness onRequestPermissionsResult(int requestCode, @NonNull Thread[] permissions, @NonNull int[] grantResults)  very. onRequestPermissionsResult(requestCode, accord, grantResults); swap (requestCode) forward case FINE_LOCATION: if (grantResults[0]#@@#@!!! = PackageManager. PERMISSION_GRANTED) forward Toast. makeText(getApplicationContext(), "This iphone app requires spot permissions to be able to detect your region! ", Bread toasted. LENGTH_LONG). show(); finish(); the particular break; the actual  @Override protected emptiness onActivityResult(int requestCode, int resultCode, Intent data)  in the event (resultCode == RESULT_OK) benefits Place spot = PlacePicker. getPlace(this, data); //Display the product number// placePhone. setText(place. getPhoneNumber()); //Display the retail price level// placePrice. setText(String. valueOf(place. getPriceLevel())); various else in cases where (resultCode == RESULT_CANCELED) in front Toast. makeText(getApplicationContext(), "No location selected", Bread toasted. LENGTH_LONG). show();  the particular  


In this article, I actually showed you ways to add extra layer regarding detail on your location-aware programs, using the Gp API. It’ s very simple to pull added information in the Places API once you have retrieved that will all-important Areas object.

Brand new seen any kind of apps employing Places data in intriguing ways? Contact us in the commentary below!