Google Place API 자동 검색 사용법

2017. 10. 16. 01:22Application Programming/Android

Google Place API를 사용하려면 일단 API 키가 필요한데, Google Maps API 키를 발급 받았다면 같은 키로 Place API도 사용할 수 있다.


https://console.developers.google.com/ 에 접속하면 발급 받은 API키를 관리할 수 있는데.


좌측 상단에 GoogleAPIs 라는 로고 옆에 내가 지금까지 API를 사용하기 위해 발급받은 프로젝트 목록 중 하나를 선택할 수 있다. (필요하다면 새로 발급받는 것도 가능하다.) 


여기서 원하는 프로젝트를 고르면 좌측 대시보드, 라이브러리, 사용자 인증정보의 세 가지 탭 중 대시보드항목에 해당 프로젝트에서 사용된 트래픽, 오류 등에 대한 정보가 나올 것이다.


프로젝트 정보의 아래쪽에 프로젝트에서 사용하는 API 목록이 있고, 나는 Maps API와 Place API 두 가지를 사용하기 때문에 목록에 두 가지 항목 뿐이다. 


사용하는 API를 추가하고자 한다면 프로젝트 정보 위쪽에 API 및 서비스 사용 설정을 눌러 원하는 API를 추가하도록 한다.




Place API를 추가했다면 이제 사용자 인증정보에서 원하는 api키를 선택하고 SHA-1과 패키지 명을 추가하면 된다.


여기까지는 다른 블로그에 자세한 설명이 많다 ㅜㅜ 내가 헤맨부분은 실제 구현이었는데


우선 두 api를 하나의 인증 키로 불러오기 위해서는 manifest.xml에서 api key부분을 다음과 같이 수정해야한다.

원래 Map API만 사용할 때도 추가해야했던 부분이지만 android:name 값을 아래와 같이 바꾸어야 Place API까지 불러올 수 있다.


1
2
3
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="여기다 키 넣으세요" />
cs


그 다음, 자동검색창을 넣고싶은 액티비티의 xml에 

1
2
3
4
5
6
            <fragment
                android:id="@+id/place_autocomplete_fragment1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment"
                />
cs


이렇게 프래그먼트 하나를 추가해주고, 해당 액티비티의 Oncreate 함수 안에 아래처럼 리스너를 연결하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
       PlaceAutocompleteFragment autocompleteFragment = (PlaceAutocompleteFragment)
                getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment1);
 
        autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
            @Override
            public void onPlaceSelected(Place place) {
                // TODO: Get info about the selected place.
                System.out.println"Place: " + place.getName());
            }
 
            @Override
            public void onError(Status status) {
                // TODO: Handle the error.
                System.out.println"An error occurred: " + status);
            }
        });
cs