Tuesday, December 13, 2016

Place Picker

Place Picker is use to select single place from number of place choice on map.


 
Steps to use place Picker in your project.
  1. Crate a project in android studio.
     
  2. Open your build.gradle(app) and add a dependency to it-
     
    //______add google play service
    compile 'com.google.android.gms:play-services:9.0.0'

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.0"
    
        defaultConfig {
            applicationId "com.pankaj.placepicker.demo"
            minSdkVersion 15
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
    
        buildTypes {
    
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:25.0.1'
        testCompile 'junit:junit:4.12'
    
        //______add google play service
        compile 'com.google.android.gms:play-services:9.0.0'
    }
    
     
  3. Open your menifest.xml and update it-
     
    <!--mata data for place api-->
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="@string/app_id" />

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.pankaj.placepicker.demo">
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
    
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <!--mata data for place api-->
            <!--https://console.developers.google.com/apis-->
            <meta-data
                android:name="com.google.android.geo.API_KEY"
                android:value="@string/app_id" />
        </application>
    </manifest>
    
     
  4. Look on the meta data i used "app_id". Go to the google console and create your app.


  5. Enter the application name and click on "create".




  6. Select the dashboard from the left side menu and click on Enable API.



  7. Now search "Google Places API" and select from the filtered list.



  8. Select "Credentials" from left side menu. and click on "Create Credentials"

    Click on "API Key"
  9. Now Finally you got api key, copy this and add into the string.xml.



  10. Open your main_activity.xml and update it-

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.pankaj.placepicker.demo.MainActivity">
    
        <!--button to open place picker-->
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:onClick="openPlacePicker"
            android:text="Pick Address By Place Picker" />
    </LinearLayout>
    
     
  11. Open your MainActivity.JAVA class and update it -

    package com.pankaj.placepicker.demo;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.annotation.NonNull;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Toast;
    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GooglePlayServicesNotAvailableException;
    import com.google.android.gms.common.GooglePlayServicesRepairableException;
    import com.google.android.gms.common.api.GoogleApiClient;
    import com.google.android.gms.location.places.Place;
    import com.google.android.gms.location.places.Places;
    import com.google.android.gms.location.places.ui.PlacePicker;
    
    public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener {
    
        //_______create object
        private GoogleApiClient mGoogleApiClient;
        private final int PLACE_PICKER_REQUEST = 1;
        private String TAG = "place";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //________initialize google client api
            mGoogleApiClient = new GoogleApiClient
                    .Builder(this)
                    .addApi(Places.GEO_DATA_API)
                    .addApi(Places.PLACE_DETECTION_API)
                    .enableAutoManage(this, this)
                    .build();
        }
    
        //_________methode will be call when user click on "Pick Address By Place Picker"
        public void openPlacePicker(View view) {
    
            //___________create object of placepicker builder
            PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
            try {
    
                //__________start placepicker activity for result
                startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
    
            } catch (GooglePlayServicesRepairableException e) {
                e.printStackTrace();
            } catch (GooglePlayServicesNotAvailableException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
            Toast.makeText(this, "Connection failed", Toast.LENGTH_SHORT).show();
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
           //____________check for successfull result
            if (resultCode == RESULT_OK) {
                switch (requestCode) {
    
                    //_________case for placepicker
                    case PLACE_PICKER_REQUEST:
    
                        //______create place object from the received intent.
                        Place place = PlacePicker.getPlace(data, this);
    
                        //______get place name from place object
                        String toastMsg = String.format("Place: %s", place.getName());
    
                        //_________show toast message for selected place
                        Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show();
    
                        break;
                }
            }
        }
    }
    
    
    

  12. Now all the development steps for Place Picker has completed, Please run the application.




  13. Click on "Pick Address By Place Picker", this will be open the places screen you can select any place by moving on the map, and select any place.  See the result on screen- 




  14. If you want to search place then click on the search bar and type keyword. Here auto suggestion will be listed so you select any place from this suggested list.  See the result on screen-


     


  15. When you will select any place a popup dialog will be shown for the confirmation then click on "OK". See the result on screen-




  16.  Good bye, Thanks to read this blog.




No comments:

Post a Comment