Site icon C1CTech

Android Get current and Nearby Places Using Places SDK

<p>The Google Play Services version of the Places SDK for Android &lpar;i&period;e&period; <strong><span style&equals;"color&colon; &num;008000&semi;">com&period;google&period;android&period;gms&colon;play-services-places<&sol;span><&sol;strong>&rpar; is turned off on July 29&comma; 2019&period; Now a new version of the Places SDK for Android is available which depends on <span style&equals;"color&colon; &num;0000ff&semi;"><strong><span style&equals;"color&colon; &num;008000&semi;"><a style&equals;"color&colon; &num;008000&semi;" href&equals;"https&colon;&sol;&sol;developer&period;android&period;com&sol;jetpack&sol;androidx">AndroidX<&sol;a><&sol;span>&period;<&sol;strong><&sol;span><&sol;p>&NewLine;<p>In this article&comma; we will talk about how to get current and nearby places of user&&num;8217&semi;s device using a new Google Places library and also how to implement it in google map&period;<&sol;p>&NewLine;<p>The new version of the Places SDK for Android introduces new methods &colon;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">fetchPlace&lpar;&rpar;<&sol;span><&sol;strong> &colon; Fetches the details about a particular place&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">fetchPhoto&lpar;&rpar;<&sol;span> <&sol;strong>&colon; Fetches a photo&period; The photos service may cache the image data&period; If the requested photo does not exist in the cache then a network lookup will be performed&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">findCurrentPlace&lpar;&rpar;<&sol;span> <&sol;strong>&colon; Fetches the approximate current location of the user&&num;8217&semi;s device&period; It returns a list of <strong><span style&equals;"color&colon; &num;008000&semi;">PlaceLikelihoods<&sol;span><&sol;strong> indicating places where the user&&num;8217&semi;s device is most likely to be located&period;<&sol;p>&NewLine;<p><strong><span style&equals;"color&colon; &num;0000ff&semi;">findAutocompletePredictions&lpar;&rpar;<&sol;span><&sol;strong> &colon; It return place predictions in response to user search queries&period;<&sol;p>&NewLine;<h3 id&equals;"install&lowbar;the&lowbar;client&lowbar;library"><span style&equals;"color&colon; &num;000080&semi;"><strong>Adding the client library<&sol;strong><&sol;span><&sol;h3>&NewLine;<p>In the <strong><span style&equals;"color&colon; &num;008000&semi;">dependencies<&sol;span><&sol;strong> section of your app-level <strong><span style&equals;"color&colon; &num;0000ff&semi;">build&period;gradle<&sol;span><&sol;strong> file&comma; add a dependency for the new SDK client library&comma; as shown below&colon;<&sol;p>&NewLine;<pre class&equals;"notranslate" dir&equals;"ltr"><span class&equals;"pln">dependencies <&sol;span><span class&equals;"pun">&lbrace;<&sol;span><span class&equals;"pln">&NewLine;  implementation <&sol;span><span class&equals;"str">'com&period;google&period;android&period;libraries&period;places&colon;places&colon;2&period;0&period;0'<&sol;span>&NewLine;<span class&equals;"pun">&rcub;<&sol;span><&sol;pre>&NewLine;<p>Make sure that the <strong><span style&equals;"color&colon; &num;008000&semi;">minSdkVersion<&sol;span><&sol;strong> for your application project is 16 or higher<&sol;p>&NewLine;<h3 id&equals;"initialize&lowbar;the&lowbar;new&lowbar;places&lowbar;sdk&lowbar;client"><strong><span style&equals;"color&colon; &num;000080&semi;">Initialize the new Places SDK client<&sol;span><&sol;strong><&sol;h3>&NewLine;<p>Initialize the new Places SDK client as shown below&colon;<&sol;p>&NewLine;<pre dir&equals;"ltr"><code dir&equals;"ltr"><span class&equals;"com"><strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Add an import statement for the client library&period;<&sol;span><&sol;strong><&sol;span>&NewLine;<span class&equals;"kwd">import<&sol;span><span class&equals;"pln"> com<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"pln">google<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"pln">android<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"pln">libraries<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"pln">places<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"pln">api<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"typ">Places<&sol;span><span class&equals;"pun">&semi;<&sol;span>&NewLine;&NewLine;<span class&equals;"pun">&period;&period;&period;<&sol;span>&NewLine;&NewLine;<strong><span class&equals;"com" style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Initialize Places&period;<&sol;span><&sol;strong>&NewLine;<span class&equals;"typ">Places<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"pln">initialize<&sol;span><span class&equals;"pun">&lpar;<&sol;span><span class&equals;"pln">getApplicationContext<&sol;span><span class&equals;"pun">&lpar;&rpar;&comma;<&sol;span><span class&equals;"pln"> apiKey<&sol;span><span class&equals;"pun">&rpar;&semi;<&sol;span>&NewLine;&NewLine;<strong><span class&equals;"com" style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Create a new Places client instance&period;<&sol;span><&sol;strong>&NewLine;<span class&equals;"typ">PlacesClient<&sol;span><span class&equals;"pln"> placesClient <&sol;span><span class&equals;"pun">&equals;<&sol;span> <span class&equals;"typ">Places<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"pln">createClient<&sol;span><span class&equals;"pun">&lpar;<&sol;span><span class&equals;"kwd">this<&sol;span><span class&equals;"pun">&rpar;&semi;<&sol;span><&sol;code><&sol;pre>&NewLine;<p>Now let’s see how to implement this in an example project&period;<&sol;p>&NewLine;<h3><span style&equals;"color&colon; &num;000080&semi;"><strong>Creating New Project<&sol;strong><&sol;span><&sol;h3>&NewLine;<p><strong>1<&sol;strong> &period;Create a new project in <span style&equals;"color&colon; &num;008000&semi;"><strong>Android Studio<&sol;strong><&sol;span> from <span style&equals;"color&colon; &num;008000&semi;"><strong>File &Implies; New Project<&sol;strong><&sol;span> and fill the project details&period;<&sol;p>&NewLine;<h4><span style&equals;"color&colon; &num;000080&semi;"><strong>Getting the API key<&sol;strong><&sol;span><&sol;h4>&NewLine;<ul>&NewLine;<li>Go to <span style&equals;"color&colon; &num;0000ff&semi;"><strong>Google API Console&period;<&sol;strong><&sol;span><&sol;li>&NewLine;<li>Create a new project and generate a new API key corresponding to your <span style&equals;"color&colon; &num;008000&semi;"><strong>SHA1<&sol;strong><&sol;span> and <span style&equals;"color&colon; &num;008000&semi;"><strong>application package name<&sol;strong><&sol;span>&period;<&sol;li>&NewLine;<li>To integrate google map and to access nearby places in your application<span style&equals;"color&colon; &num;0000ff&semi;"><span style&equals;"color&colon; &num;000000&semi;"> <&sol;span><&sol;span>enable <strong><span style&equals;"color&colon; &num;008000&semi;">Maps SDK for Android<&sol;span><&sol;strong> and <span style&equals;"color&colon; &num;008000&semi;"><strong>Places API&period;<&sol;strong><&sol;span><&sol;li>&NewLine;<li>Open <span style&equals;"color&colon; &num;008000&semi;"><strong>AndroidManifest&period;xml<&sol;strong><&sol;span> and add the generated API key to your project above the application <span style&equals;"color&colon; var&lpar;--color-text&rpar;&semi;">tag as shown below &colon;<&sol;span><&sol;li>&NewLine;<&sol;ul>&NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>AndroidManifest&period;xml<&sol;strong><&sol;span><&excl;--&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;--><&sol;p>&NewLine;<pre>&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi;&NewLine;&lt&semi;manifest xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android"&NewLine;package&equals;"com&period;example&period;getnearbyplaces"&gt&semi;&NewLine;&NewLine;&lt&semi;uses-permission android&colon;name&equals;"android&period;permission&period;ACCESS&lowbar;FINE&lowbar;LOCATION" &sol;&gt&semi;&NewLine;&lt&semi;uses-permission android&colon;name&equals;"android&period;permission&period;ACCESS&lowbar;WIFI&lowbar;STATE"&sol;&gt&semi;&NewLine;&lt&semi;uses-permission android&colon;name&equals;"android&period;permission&period;INTERNET"&sol;&gt&semi;&NewLine;&NewLine;&lt&semi;application&NewLine; android&colon;allowBackup&equals;"true"&NewLine; android&colon;icon&equals;"&commat;mipmap&sol;ic&lowbar;launcher"&NewLine; android&colon;label&equals;"&commat;string&sol;app&lowbar;name"&NewLine; android&colon;roundIcon&equals;"&commat;mipmap&sol;ic&lowbar;launcher&lowbar;round"&NewLine; android&colon;supportsRtl&equals;"true"&NewLine; android&colon;theme&equals;"&commat;style&sol;AppTheme"&gt&semi;&NewLine;&NewLine; &lt&semi;activity android&colon;name&equals;"&period;MainActivity"&gt&semi;&NewLine; &lt&semi;intent-filter&gt&semi;&NewLine; &lt&semi;action android&colon;name&equals;"android&period;intent&period;action&period;MAIN" &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;category android&colon;name&equals;"android&period;intent&period;category&period;LAUNCHER" &sol;&gt&semi;&NewLine; &lt&semi;&sol;intent-filter&gt&semi;&NewLine; &lt&semi;&sol;activity&gt&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;"> &lt&semi;meta-data<&sol;span><&sol;strong>&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;"> android&colon;name&equals;"com&period;google&period;android&period;geo&period;API&lowbar;KEY"<&sol;span><&sol;strong>&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;"> android&colon;value&equals;"&commat;string&sol;API&lowbar;KEY" &sol;&gt&semi;<&sol;span><&sol;strong>&NewLine;&NewLine;&lt&semi;&sol;application&gt&semi;&NewLine;&NewLine;&lt&semi;&sol;manifest&gt&semi;<&sol;pre>&NewLine;<p><strong>2<&sol;strong>&period; Open <span style&equals;"color&colon; &num;008000&semi;"><strong>build&period;gradle<&sol;strong><&sol;span> and add dependency for the new Places SDK client library to get current and nearby places and also add a dependency for google map as shown below&colon;<&sol;p>&NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>build&period;gradle<&sol;strong><&sol;span><&sol;p>&NewLine;<pre>dependencies &lbrace;&NewLine; implementation fileTree&lpar;dir&colon; 'libs'&comma; include&colon; &lbrack;'&ast;&period;jar'&rsqb;&rpar;&NewLine; implementation 'androidx&period;appcompat&colon;appcompat&colon;1&period;1&period;0'&NewLine; implementation 'androidx&period;constraintlayout&colon;constraintlayout&colon;1&period;1&period;3'&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong>&NewLine; &sol;&sol;library for google map<&sol;strong><&sol;span>&NewLine; implementation 'com&period;google&period;android&period;gms&colon;play-services-maps&colon;16&period;1&period;0'&NewLine;<span style&equals;"color&colon; &num;008000&semi;"><strong>&NewLine; &sol;&sol;Places SDK client library<&sol;strong><&sol;span>&NewLine; implementation 'com&period;google&period;android&period;libraries&period;places&colon;places&colon;2&period;0&period;0'&NewLine;&NewLine; testImplementation 'junit&colon;junit&colon;4&period;12'&NewLine; androidTestImplementation 'androidx&period;test&colon;runner&colon;1&period;2&period;0'&NewLine; androidTestImplementation 'androidx&period;test&period;espresso&colon;espresso-core&colon;3&period;2&period;0'&NewLine;&rcub;<&sol;pre>&NewLine;<p><strong>3 <&sol;strong>&period;Open <span style&equals;"color&colon; &num;008000&semi;"><strong>AndroidManifest<&sol;strong><&sol;span> file and add all the permissions which you want to request above the application tag&period;<&sol;p>&NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>AndroidManifest&period;xml<&sol;strong><&sol;span><&excl;--&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;--><&sol;p>&NewLine;<pre>&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi;&NewLine;&lt&semi;manifest xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android"&NewLine;package&equals;"com&period;example&period;getnearbyplaces"&gt&semi;&NewLine;&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">&lt&semi;uses-permission android&colon;name&equals;"android&period;permission&period;ACCESS&lowbar;FINE&lowbar;LOCATION" &sol;&gt&semi;<&sol;span><&sol;strong>&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">&lt&semi;uses-permission android&colon;name&equals;"android&period;permission&period;ACCESS&lowbar;WIFI&lowbar;STATE"&sol;&gt&semi;<&sol;span><&sol;strong>&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;">&lt&semi;uses-permission android&colon;name&equals;"android&period;permission&period;INTERNET"&sol;&gt&semi;<&sol;span><&sol;strong>&NewLine;&NewLine;&lt&semi;application&NewLine; android&colon;allowBackup&equals;"true"&NewLine; android&colon;icon&equals;"&commat;mipmap&sol;ic&lowbar;launcher"&NewLine; android&colon;label&equals;"&commat;string&sol;app&lowbar;name"&NewLine; android&colon;roundIcon&equals;"&commat;mipmap&sol;ic&lowbar;launcher&lowbar;round"&NewLine; android&colon;supportsRtl&equals;"true"&NewLine; android&colon;theme&equals;"&commat;style&sol;AppTheme"&gt&semi;&NewLine;&NewLine; &lt&semi;activity android&colon;name&equals;"&period;MainActivity"&gt&semi;&NewLine; &lt&semi;intent-filter&gt&semi;&NewLine; &lt&semi;action android&colon;name&equals;"android&period;intent&period;action&period;MAIN" &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;category android&colon;name&equals;"android&period;intent&period;category&period;LAUNCHER" &sol;&gt&semi;&NewLine; &lt&semi;&sol;intent-filter&gt&semi;&NewLine; &lt&semi;&sol;activity&gt&semi;&NewLine;&NewLine; &lt&semi;meta-data&NewLine; android&colon;name&equals;"com&period;google&period;android&period;geo&period;API&lowbar;KEY"&NewLine; android&colon;value&equals;"&commat;string&sol;API&lowbar;KEY" &sol;&gt&semi;&NewLine;&NewLine;&lt&semi;&sol;application&gt&semi;&NewLine;&NewLine;&lt&semi;&sol;manifest&gt&semi;<&sol;pre>&NewLine;<p><strong>4<&sol;strong>&period; Open the layout file of your main activity &lpar;<span style&equals;"color&colon; &num;008000&semi;"><strong>activity&lowbar;main&period;xml<&sol;strong> <&sol;span>&rpar;&period; Now add map fragment to show map and one button to get nearby places&period;<&sol;p>&NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><strong>activity&lowbar;main&period;xml<&sol;strong> <&sol;span><&sol;p>&NewLine;<pre>&lt&semi;&quest;xml version&equals;"1&period;0" encoding&equals;"utf-8"&quest;&gt&semi;&NewLine;&lt&semi;RelativeLayout xmlns&colon;android&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res&sol;android"&NewLine; xmlns&colon;app&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;apk&sol;res-auto"&NewLine; xmlns&colon;tools&equals;"http&colon;&sol;&sol;schemas&period;android&period;com&sol;tools"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"match&lowbar;parent"&NewLine; tools&colon;context&equals;"&period;MainActivity"&gt&semi;&NewLine;&NewLine; &lt&semi;Button&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;btn&lowbar;nearby&lowbar;places"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"wrap&lowbar;content"&NewLine; android&colon;layout&lowbar;alignParentBottom&equals;"true"&NewLine; android&colon;layout&lowbar;margin&equals;"16dp"&NewLine; android&colon;background&equals;"&commat;color&sol;colorPrimary"&NewLine; android&colon;text&equals;"Find NearBy Places"&NewLine; android&colon;textColor&equals;"&num;FFFFFF"&NewLine; android&colon;textStyle&equals;"bold" &sol;&gt&semi;&NewLine;&NewLine; &lt&semi;fragment&NewLine; android&colon;id&equals;"&commat;&plus;id&sol;map"&NewLine; android&colon;name&equals;"com&period;google&period;android&period;gms&period;maps&period;SupportMapFragment"&NewLine; android&colon;layout&lowbar;width&equals;"match&lowbar;parent"&NewLine; android&colon;layout&lowbar;height&equals;"match&lowbar;parent" &sol;&gt&semi;&NewLine;&NewLine;&lt&semi;&sol;RelativeLayout&gt&semi;<&sol;pre>&NewLine;<h4 id&equals;"initialize&lowbar;the&lowbar;new&lowbar;places&lowbar;sdk&lowbar;client"><strong><span style&equals;"color&colon; &num;000080&semi;">Initialize the new Places SDK client<&sol;span><&sol;strong><&sol;h4>&NewLine;<p><strong>5 <&sol;strong>&period;Open <span style&equals;"color&colon; &num;008000&semi;"><strong>MainActivity&period;java<&sol;strong><&sol;span> and inside onCreate&lpar;&rpar; initialize the new Places SDK client as shown below&colon;<&sol;p>&NewLine;<pre>&commat;Override&NewLine;protected void onCreate&lpar;Bundle savedInstanceState&rpar; &lbrace;&NewLine; super&period;onCreate&lpar;savedInstanceState&rpar;&semi;&NewLine; setContentView&lpar;R&period;layout&period;activity&lowbar;main&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Initialize Places&period;<&sol;span><&sol;strong>&NewLine; Places&period;initialize&lpar;getApplicationContext&lpar;&rpar;&comma; "AIzaSyCMznC3Jp0dQQTqLkq15qnz-U-kDA2&lowbar;pHo"&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Create a new Places client instance&period;<&sol;span><&sol;strong>&NewLine; placesClient &equals; Places&period;createClient&lpar;this&rpar;&semi;&NewLine;&rcub;<&sol;pre>&NewLine;<h4><strong><span style&equals;"color&colon; &num;000080&semi;">Finding Current Location<&sol;span><&sol;strong><&sol;h4>&NewLine;<p>Places SDK library provide a method called  <strong><span style&equals;"color&colon; &num;008000&semi;"><a style&equals;"color&colon; &num;008000&semi;" href&equals;"https&colon;&sol;&sol;developers&period;google&period;com&sol;places&sol;android-sdk&sol;reference&sol;com&sol;google&sol;android&sol;libraries&sol;places&sol;api&sol;net&sol;PlacesClient&period;html&num;findCurrentPlace&lpar;com&period;google&period;android&period;libraries&period;places&period;api&period;net&period;FindCurrentPlaceRequest&rpar;">findCurrentPlace&lpar;&rpar;<&sol;a><&sol;span><&sol;strong> to find the current location of the user&&num;8217&semi;s device&period;It returns a list of <strong><span style&equals;"color&colon; &num;008000&semi;">PlaceLikelihoods<&sol;span><&sol;strong> indicating places where the user&&num;8217&semi;s device is most likely to be located&period;<&sol;p>&NewLine;<p><strong>6 <&sol;strong>&period;Create a <strong><span style&equals;"color&colon; &num;008000&semi;">FindCurrentPlaceRequest<&sol;span><&sol;strong>&comma; including a list of place data types to return&period;<&sol;p>&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;98&period;1 -->&NewLine;<div class&equals;"quads-location quads-ad2" id&equals;"quads-ad2" style&equals;"float&colon;none&semi;margin&colon;0px&semi;">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;<pre dir&equals;"ltr"><code dir&equals;"ltr"><span class&equals;"com"><strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Use fields to define the data types to return&period;<&sol;span><&sol;strong><&sol;span><span class&equals;"pln">&NewLine;  <&sol;span><span class&equals;"typ">List<&sol;span><span class&equals;"pun">&lt&semi;<&sol;span><span class&equals;"typ">Place<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"typ">Field<&sol;span><span class&equals;"pun">&gt&semi;<&sol;span><span class&equals;"pln"> placeFields <&sol;span><span class&equals;"pun">&equals;<&sol;span> <span class&equals;"typ">Arrays<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"pln">asList<&sol;span><span class&equals;"pun">&lpar;<span class&equals;"typ">Place<&sol;span>&period;<span class&equals;"typ">Field<&sol;span>&period;<span class&equals;"pln">ID&comma;&NewLine;<&sol;span><&sol;span><span class&equals;"typ">Place<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"typ">Field<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"pln">NAME&comma;<span class&equals;"typ">Place<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"typ">Field<&sol;span><span class&equals;"pun">&period;<&sol;span>ADDRESS<&sol;span><span class&equals;"pun">&rpar;&semi;<&sol;span><span class&equals;"pln">&NewLine;&NewLine;  <&sol;span><strong><span class&equals;"com" style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Use the builder to create a FindCurrentPlaceRequest&period;<&sol;span><&sol;strong><span class&equals;"pln">&NewLine;  <&sol;span><span class&equals;"typ">FindCurrentPlaceRequest<&sol;span><span class&equals;"pln"> request <&sol;span><span class&equals;"pun">&equals;<&sol;span><span class&equals;"pln">&NewLine;          <&sol;span><span class&equals;"typ">FindCurrentPlaceRequest<&sol;span><span class&equals;"pun">&period;<&sol;span><span class&equals;"pln">builder<&sol;span><span class&equals;"pun">&lpar;<&sol;span><span class&equals;"pln">placeFields<&sol;span><span class&equals;"pun">&rpar;&period;<&sol;span><span class&equals;"pln">build<&sol;span><span class&equals;"pun">&lpar;&rpar;&semi;<&sol;span><&sol;code><&sol;pre>&NewLine;<p><strong>7 <&sol;strong>&period;Call <strong><span style&equals;"color&colon; &num;008000&semi;">findCurrentPlace<&sol;span><&sol;strong> and handle the response&comma; checking first to verify that the user has granted permission to use their device location&period;<&sol;p>&NewLine;<pre>if &lpar;ContextCompat&period;checkSelfPermission&lpar;this&comma; Manifest&period;permission&period;ACCESS&lowbar;FINE&lowbar;LOCATION&rpar; &equals;&equals; PackageManager&period;PERMISSION&lowbar;GRANTED&rpar; &lbrace;&NewLine;&NewLine; placesClient&period;findCurrentPlace&lpar;request&rpar;&period;addOnCompleteListener&lpar;new OnCompleteListener&lpar;&rpar; &lbrace;&NewLine; &commat;Override&NewLine; public void onComplete&lpar;&commat;NonNull Task task&rpar; &lbrace;&NewLine;&NewLine; if &lpar;task&period;isSuccessful&lpar;&rpar;&rpar; &lbrace;&NewLine;&NewLine; FindCurrentPlaceResponse response &equals; task&period;getResult&lpar;&rpar;&semi;&NewLine; placeLikelihoods &equals; new ArrayList&lt&semi;&gt&semi;&lpar;&rpar;&semi;&NewLine; placeLikelihoods&period;addAll&lpar;response&period;getPlaceLikelihoods&lpar;&rpar;&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;response&period;getPlaceLikelihoods&lpar;&rpar; will return list of PlaceLikelihood&NewLine; &sol;&sol;we need to create a custom comparator to sort list by likelihoods<&sol;span><&sol;strong>&NewLine; Collections&period;sort&lpar;placeLikelihoods&comma; new Comparator&lpar;&rpar; &lbrace;&NewLine; &commat;Override&NewLine; public int compare&lpar;PlaceLikelihood placeLikelihood&comma; PlaceLikelihood t1&rpar; &lbrace;&NewLine; return new Double&lpar;placeLikelihood&period;getLikelihood&lpar;&rpar;&rpar;&period;compareTo&lpar;t1&period;getLikelihood&lpar;&rpar;&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;After sort &comma;it will order by ascending &comma; we just reverse it to get first item as nearest place&NewLine;<&sol;span> <&sol;strong> Collections&period;reverse&lpar;placeLikelihoods&rpar;&semi;&NewLine;&NewLine; placeId &equals; placeLikelihoods&period;get&lpar;0&rpar;&period;getPlace&lpar;&rpar;&period;getId&lpar;&rpar;&semi;&NewLine; latLng &equals; placeLikelihoods&period;get&lpar;0&rpar;&period;getPlace&lpar;&rpar;&period;getLatLng&lpar;&rpar;&semi;&NewLine; address &equals; placeLikelihoods&period;get&lpar;0&rpar;&period;getPlace&lpar;&rpar;&period;getAddress&lpar;&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;Removing item of the list at 0 index<&sol;span><&sol;strong>&NewLine; placeLikelihoods&period;remove&lpar;0&rpar;&semi;&NewLine;&NewLine; SupportMapFragment supportMapFragment &equals; &lpar;SupportMapFragment&rpar; getSupportFragmentManager&lpar;&rpar;&period;findFragmentById&lpar;R&period;id&period;map&rpar;&semi;&NewLine; supportMapFragment&period;getMapAsync&lpar;MainActivity&period;this&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; &rcub;&NewLine; &rcub;&rpar;&period;addOnFailureListener&lpar;new OnFailureListener&lpar;&rpar; &lbrace;&NewLine; &commat;Override&NewLine; public void onFailure&lpar;&commat;NonNull Exception e&rpar; &lbrace;&NewLine;&NewLine; Toast&period;makeText&lpar;MainActivity&period;this&comma; "Place not found&colon; " &plus; e&period;getMessage&lpar;&rpar;&comma; Toast&period;LENGTH&lowbar;LONG&rpar;&period;show&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&rpar;&semi;&NewLine;&rcub; else &lbrace;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;Requesting permission if it is not already granted<&sol;span><&sol;strong>&NewLine; ActivityCompat&period;requestPermissions&lpar;this&comma; new String&lbrack;&rsqb;&lbrace;Manifest&period;permission&period;ACCESS&lowbar;FINE&lowbar;LOCATION&rcub;&comma; REQUEST&lowbar;CODE&rpar;&semi;&NewLine; return&semi;&NewLine;&rcub;&NewLine;<&sol;pre>&NewLine;<h4><strong><span style&equals;"color&colon; &num;000080&semi;">Complete Code<&sol;span><&sol;strong><&sol;h4>&NewLine;<p><strong>8 <&sol;strong>&period;Open <span style&equals;"color&colon; &num;008000&semi;"><b>MainActivity&period;java<&sol;b><&sol;span> and write the below code&period;<&sol;p>&NewLine;<p><span style&equals;"color&colon; &num;0000ff&semi;"><b>MainActivity&period;java<&sol;b><&sol;span><&sol;p>&NewLine;<pre>package com&period;example&period;getnearbyplaces&semi;&NewLine;&NewLine;import android&period;Manifest&semi;&NewLine;import android&period;content&period;pm&period;PackageManager&semi;&NewLine;import android&period;os&period;Bundle&semi;&NewLine;import android&period;view&period;View&semi;&NewLine;import android&period;widget&period;Button&semi;&NewLine;import android&period;widget&period;Toast&semi;&NewLine;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;CameraUpdateFactory&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;GoogleMap&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;OnMapReadyCallback&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;SupportMapFragment&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;model&period;BitmapDescriptorFactory&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;model&period;LatLng&semi;&NewLine;import com&period;google&period;android&period;gms&period;maps&period;model&period;MarkerOptions&semi;&NewLine;import com&period;google&period;android&period;gms&period;tasks&period;OnCompleteListener&semi;&NewLine;import com&period;google&period;android&period;gms&period;tasks&period;OnFailureListener&semi;&NewLine;import com&period;google&period;android&period;gms&period;tasks&period;Task&semi;&NewLine;import com&period;google&period;android&period;libraries&period;places&period;api&period;Places&semi;&NewLine;import com&period;google&period;android&period;libraries&period;places&period;api&period;model&period;Place&semi;&NewLine;import com&period;google&period;android&period;libraries&period;places&period;api&period;model&period;PlaceLikelihood&semi;&NewLine;import com&period;google&period;android&period;libraries&period;places&period;api&period;net&period;FindCurrentPlaceRequest&semi;&NewLine;import com&period;google&period;android&period;libraries&period;places&period;api&period;net&period;FindCurrentPlaceResponse&semi;&NewLine;import com&period;google&period;android&period;libraries&period;places&period;api&period;net&period;PlacesClient&semi;&NewLine;&NewLine;import java&period;util&period;ArrayList&semi;&NewLine;import java&period;util&period;Arrays&semi;&NewLine;import java&period;util&period;Collections&semi;&NewLine;import java&period;util&period;Comparator&semi;&NewLine;import java&period;util&period;List&semi;&NewLine;&NewLine;import androidx&period;annotation&period;NonNull&semi;&NewLine;import androidx&period;appcompat&period;app&period;AppCompatActivity&semi;&NewLine;import androidx&period;core&period;app&period;ActivityCompat&semi;&NewLine;import androidx&period;core&period;content&period;ContextCompat&semi;&NewLine;&NewLine;public class MainActivity extends AppCompatActivity implements OnMapReadyCallback &lbrace;&NewLine;&NewLine; private static final int REQUEST&lowbar;CODE &equals; 200&semi;&NewLine; PlacesClient placesClient&semi;&NewLine; List placeFields &equals; Arrays&period;asList&lpar;Place&period;Field&period;ID&comma; Place&period;Field&period;NAME&comma; Place&period;Field&period;ADDRESS&rpar;&semi;&NewLine; Button btn&lowbar;nearby&lowbar;places&semi;&NewLine; LatLng latLng&semi;&NewLine; String address&semi;&NewLine; private String placeId&semi;&NewLine; private List placeLikelihoods&semi;&NewLine; GoogleMap map&semi;&NewLine;&NewLine; &commat;Override&NewLine; protected void onCreate&lpar;Bundle savedInstanceState&rpar; &lbrace;&NewLine; super&period;onCreate&lpar;savedInstanceState&rpar;&semi;&NewLine; setContentView&lpar;R&period;layout&period;activity&lowbar;main&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Initialize Places&period;<&sol;span><&sol;strong>&NewLine; Places&period;initialize&lpar;getApplicationContext&lpar;&rpar;&comma; "AIzaSyCMznC3Jp0dQQTqLkq15qnz-U-kDA2&lowbar;pHo"&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Create a new Places client instance&period;<&sol;span><&sol;strong>&NewLine; placesClient &equals; Places&period;createClient&lpar;this&rpar;&semi;&NewLine;&NewLine; btn&lowbar;nearby&lowbar;places &equals; findViewById&lpar;R&period;id&period;btn&lowbar;nearby&lowbar;places&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;Get the current place and nearby places of your device<&sol;span><&sol;strong>&NewLine; getCurrentPlace&lpar;&rpar;&semi;&NewLine;&NewLine; btn&lowbar;nearby&lowbar;places&period;setOnClickListener&lpar;new View&period;OnClickListener&lpar;&rpar; &lbrace;&NewLine; &commat;Override&NewLine; public void onClick&lpar;View view&rpar; &lbrace;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;setting Marker at nearby places<&sol;span><&sol;strong>&NewLine; setMarkerAtNearbyPlaces&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; private void getCurrentPlace&lpar;&rpar; &lbrace;&NewLine;&NewLine; FindCurrentPlaceRequest request &equals;&NewLine; FindCurrentPlaceRequest&period;builder&lpar;placeFields&rpar;&period;build&lpar;&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol; Call findCurrentPlace and handle the response &lpar;first check that the user has granted permission&rpar;&period;<&sol;span><&sol;strong>&NewLine; if &lpar;ContextCompat&period;checkSelfPermission&lpar;this&comma; Manifest&period;permission&period;ACCESS&lowbar;FINE&lowbar;LOCATION&rpar; &equals;&equals; PackageManager&period;PERMISSION&lowbar;GRANTED&rpar; &lbrace;&NewLine;&NewLine; placesClient&period;findCurrentPlace&lpar;request&rpar;&period;addOnCompleteListener&lpar;new OnCompleteListener&lpar;&rpar; &lbrace;&NewLine; &commat;Override&NewLine; public void onComplete&lpar;&commat;NonNull Task task&rpar; &lbrace;&NewLine;&NewLine; if &lpar;task&period;isSuccessful&lpar;&rpar;&rpar; &lbrace;&NewLine;&NewLine; FindCurrentPlaceResponse response &equals; task&period;getResult&lpar;&rpar;&semi;&NewLine; placeLikelihoods &equals; new ArrayList&lt&semi;&gt&semi;&lpar;&rpar;&semi;&NewLine; placeLikelihoods&period;addAll&lpar;response&period;getPlaceLikelihoods&lpar;&rpar;&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;response&period;getPlaceLikelihoods&lpar;&rpar; will return list of PlaceLikelihood<&sol;span><&sol;strong>&NewLine;<strong><span style&equals;"color&colon; &num;008000&semi;"> &sol;&sol;we need to create a custom comparator to sort list by likelihoods<&sol;span><&sol;strong>&NewLine; Collections&period;sort&lpar;placeLikelihoods&comma; new Comparator&lpar;&rpar; &lbrace;&NewLine; &commat;Override&NewLine; public int compare&lpar;PlaceLikelihood placeLikelihood&comma; PlaceLikelihood t1&rpar; &lbrace;&NewLine; return new Double&lpar;placeLikelihood&period;getLikelihood&lpar;&rpar;&rpar;&period;compareTo&lpar;t1&period;getLikelihood&lpar;&rpar;&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;After sort &comma;it will order by ascending &comma; we just reverse it to get first item as nearest place<&sol;span><&sol;strong>&NewLine; Collections&period;reverse&lpar;placeLikelihoods&rpar;&semi;&NewLine;&NewLine; placeId &equals; placeLikelihoods&period;get&lpar;0&rpar;&period;getPlace&lpar;&rpar;&period;getId&lpar;&rpar;&semi;&NewLine; latLng &equals; placeLikelihoods&period;get&lpar;0&rpar;&period;getPlace&lpar;&rpar;&period;getLatLng&lpar;&rpar;&semi;&NewLine; address &equals; placeLikelihoods&period;get&lpar;0&rpar;&period;getPlace&lpar;&rpar;&period;getAddress&lpar;&rpar;&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;Removing item of the list at 0 index<&sol;span><&sol;strong>&NewLine; placeLikelihoods&period;remove&lpar;0&rpar;&semi;&NewLine;&NewLine; SupportMapFragment supportMapFragment &equals; &lpar;SupportMapFragment&rpar; getSupportFragmentManager&lpar;&rpar;&period;findFragmentById&lpar;R&period;id&period;map&rpar;&semi;&NewLine; supportMapFragment&period;getMapAsync&lpar;MainActivity&period;this&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine;&NewLine; &rcub;&NewLine; &rcub;&rpar;&period;addOnFailureListener&lpar;new OnFailureListener&lpar;&rpar; &lbrace;&NewLine; &commat;Override&NewLine; public void onFailure&lpar;&commat;NonNull Exception e&rpar; &lbrace;&NewLine;&NewLine; Toast&period;makeText&lpar;MainActivity&period;this&comma; "Place not found&colon; " &plus; e&period;getMessage&lpar;&rpar;&comma; Toast&period;LENGTH&lowbar;LONG&rpar;&period;show&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&rpar;&semi;&NewLine; &rcub; else &lbrace;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;Requesting permission if it is not already granted<&sol;span><&sol;strong>&NewLine; ActivityCompat&period;requestPermissions&lpar;this&comma; new String&lbrack;&rsqb;&lbrace;Manifest&period;permission&period;ACCESS&lowbar;FINE&lowbar;LOCATION&rcub;&comma; REQUEST&lowbar;CODE&rpar;&semi;&NewLine; return&semi;&NewLine; &rcub;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; private void setMarkerAtNearbyPlaces&lpar;&rpar; &lbrace;&NewLine;&NewLine; for &lpar;PlaceLikelihood place &colon; placeLikelihoods&rpar; &lbrace;&NewLine;&NewLine; MarkerOptions markerOptions &equals; new MarkerOptions&lpar;&rpar;&period;position&lpar;place&period;getPlace&lpar;&rpar;&period;getLatLng&lpar;&rpar;&rpar;&period;title&lpar;place&period;getPlace&lpar;&rpar;&period;getAddress&lpar;&rpar;&rpar;&semi;&NewLine;&NewLine; map&period;addMarker&lpar;markerOptions&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; &commat;Override&NewLine; public void onMapReady&lpar;GoogleMap googleMap&rpar; &lbrace;&NewLine; map &equals; googleMap&semi;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;Adding marker in map at current location<&sol;span><&sol;strong>&NewLine; MarkerOptions markerOptions &equals; new MarkerOptions&lpar;&rpar;&period;position&lpar;latLng&rpar;&period;title&lpar;address&rpar;&period;icon&lpar;BitmapDescriptorFactory&period;defaultMarker&lpar;BitmapDescriptorFactory&period;HUE&lowbar;AZURE&rpar;&rpar;&semi;&NewLine; googleMap&period;animateCamera&lpar;CameraUpdateFactory&period;newLatLng&lpar;latLng&rpar;&rpar;&semi;&NewLine; googleMap&period;animateCamera&lpar;CameraUpdateFactory&period;newLatLngZoom&lpar;latLng&comma; 15&rpar;&rpar;&semi;&NewLine; googleMap&period;addMarker&lpar;markerOptions&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; <strong><span style&equals;"color&colon; &num;008000&semi;">&sol;&sol;handling request permission response<&sol;span><&sol;strong>&NewLine; &commat;Override&NewLine; public void onRequestPermissionsResult&lpar;int requestCode&comma; &commat;NonNull String&lbrack;&rsqb; permissions&comma; &commat;NonNull int&lbrack;&rsqb; grantResults&rpar; &lbrace;&NewLine;&NewLine; switch &lpar;requestCode&rpar; &lbrace;&NewLine; case REQUEST&lowbar;CODE&colon;&NewLine;&NewLine; if &lpar;grantResults&period;length &gt&semi; 0 &amp&semi;&amp&semi; grantResults&lbrack;0&rsqb; &equals;&equals; PackageManager&period;PERMISSION&lowbar;GRANTED&rpar; &lbrace;&NewLine; Toast&period;makeText&lpar;this&comma; "Permission granted"&comma; Toast&period;LENGTH&lowbar;LONG&rpar;&period;show&lpar;&rpar;&semi;&NewLine; getCurrentPlace&lpar;&rpar;&semi;&NewLine; &rcub; else&NewLine; Toast&period;makeText&lpar;this&comma; "Permission denied"&comma; Toast&period;LENGTH&lowbar;LONG&rpar;&period;show&lpar;&rpar;&semi;&NewLine; break&semi;&NewLine; &rcub;&NewLine; &rcub;&NewLine;&NewLine;&rcub;<&sol;pre>&NewLine;&NewLine;

Exit mobile version