구글맵 사용하기(Fragment 이용)
- Google Map API Key 가져오기
- https://developers.google.com/maps/android/?hl=ko
- ‘키 가져오기’ 를 클릭하여 Key를 생성하여 가져오기
- /res/strings.xml에 key를 등록하기
12345<resources><string name="app_name">WhanGoogleMap</string>......<string name="google_maps_key">XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</string></resources>- 위 XXXXX에 생성된 키 값을 넣음
- SDK 매니저에서 [Google Play Service] 추가 설치
- build_gradle(Module.app)에 play-service-maps 추가
- 프로젝트를 마우스 오른쪽 버튼을 누른 후
- Open Module Setting 메뉴를 클릭하고
- [Dependencies] 탭을 선택한 후 + 를 눌러 다음 그림과 같이 선택한다.
- /Gradle Scripts/build.gradle(Module: app)에 추가 됨
12345678910apply plugin: 'com.android.application'android {......}dependencies {......implementation 'com.google.android.gms:play-services-maps:15.0.1'}
- /layout/frag_googlemap.xml 생성
1234567<?xml version="1.0" encoding="utf-8"?><com.google.android.gms.maps.MapViewxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"class="com.google.android.gms.maps.MapFragment" /> - FragGoogleMap.java 생성
1234567public class FragGoogleMap extends android.support.v4.app.Fragmentimplements OnMapReadyCallback{@Overridepublic void onMapReady(GoogleMap googleMap) {}}- android.support.v4.app.Fragment 상속
- OnMapReadyCallback 인터페이스 구현 -> onMapReady() 자동생성
- FragGoogleMap.java 수정 : onCreateView() 메소드 생성
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667public class FragGoogleMap extends android.support.v4.app.Fragmentimplements OnMapReadyCallback {MapView m_mapView = null;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.frag_googlemap, container, false);m_mapView = (MapView)view.findViewById(R.id.map);m_mapView.getMapAsync(this);return view;}// onStart() 메서드가 없으면 지도가 나타나지 않음@Overridepublic void onStart() {super.onStart();m_mapView.onStart();}@Overridepublic void onStop() {super.onStop();m_mapView.onStop();}@Overridepublic void onSaveInstanceState(@NonNull Bundle outState) {super.onSaveInstanceState(outState);m_mapView.onSaveInstanceState(outState);}@Overridepublic void onResume() {super.onResume();m_mapView.onResume();}@Overridepublic void onPause() {super.onPause();m_mapView.onPause();}@Overridepublic void onDestroy() {super.onDestroy();m_mapView.onLowMemory();}// onActivityCreate() 메서드가 없으면 실행이 안되고 종료됨@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);if(m_mapView != null){m_mapView.onCreate(savedInstanceState);}}@Overridepublic void onMapReady(GoogleMap googleMap) {}} - AndroidManifest.xml 수정
12345678910111213141516171819<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="kr.co.moak.whangooglemap"><uses-permission android:name="android.permission.INTERNET"/><application><meta-dataandroid:name="com.google.android.geo.API_KEY"android:value="@string/google_maps_key" /><activityandroid:name=".MainActivity"......</activity></application></manifest>- <uses-permission … : 인터넷 허용
- <meta-data … : 구글 맵 키 등록
- /res/menu/activity_main_drawer.xml 수정
12345678910<?xml version="1.0" encoding="utf-8"?><menu><group android:checkableBehavior="single"><itemandroid:id="@+id/nav_frag_googlemap"android:icon="@drawable/ic_menu_camera"android:title="Google Map(Fragment)" />......</group></menu> - MainActivity.java 수정
12345678910111213141516171819202122public class MainActivity extends AppCompatActivityimplements NavigationView.OnNavigationItemSelectedListener {@SuppressWarnings("StatementWithEmptyBody")@Overridepublic boolean onNavigationItemSelected(MenuItem item) {// Handle navigation view item clicks here.int id = item.getItemId();FragmentTransaction ft = getSupportFragmentManager().beginTransaction();if (id == R.id.nav_frag_googlemap) {ft.replace(R.id.container, new FragGoogleMap());ft.commit();} else if (id == R.id.nav_gallery) {......}DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);drawer.closeDrawer(GravityCompat.START);return true;}}- 실행시키고 “Google Map(Fragment)” 메뉴를 선택하면 구글 지도가 나타남
- 나타나지 않으면 오류가 있으니 수정하고 다음으로 넘어감
- FragGoogleMap.java 수정 : onMapReady() 메소드 수정
1234567891011121314151617181920212223public class FragGoogleMap extends android.support.v4.app.Fragmentimplements OnMapReadyCallback {@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {......}@Overridepublic void onMapReady(GoogleMap googleMap) {MarkerOptions markerOption1 = new MarkerOptions();markerOption1.position(new LatLng(35.814305, 127.092188));markerOption1.title("전주대학교");markerOption1.snippet("http://www.jj.ac.kr");googleMap.addMarker(markerOption1);googleMap.moveCamera(CameraUpdateFactory.newLatLng(markerOption1.getPosition()));googleMap.animateCamera(CameraUpdateFactory.zoomTo(12));googleMap.getUiSettings().setZoomControlsEnabled(true);}}- 전주대학교의 GPS 좌표, Title, snippet을 포함하는 Marker 추가
- 전주대학교 위치로 지도를 이동
- ZoomControl 추가
- FragGetLocation.java 에 requestMyLocation() 메소드 추가와 onClick() 완성
123456789101112131415161718192021222324252627282930313233343536373839public class FragGoogleMap extends android.support.v4.app.Fragmentimplements OnMapReadyCallback, GoogleMap.OnMarkerClickListener{MapView m_mapView = null;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { }@Overridepublic void onMapReady(GoogleMap googleMap) {MarkerOptions markerOption1 = new MarkerOptions();markerOption1.position(new LatLng(35.814305, 127.092188));markerOption1.title("전주대학교");markerOption1.snippet("http://www.jj.ac.kr");googleMap.addMarker(markerOption1);MarkerOptions markerOption2 = new MarkerOptions();markerOption2.position(new LatLng(35.847078, 127.129255));markerOption2.title("전북대학교");markerOption2.snippet("http://www.jbnu.ac.kr");googleMap.addMarker(markerOption2);googleMap.moveCamera(CameraUpdateFactory.newLatLng(markerOption1.getPosition()));googleMap.animateCamera(CameraUpdateFactory.zoomTo(12));googleMap.getUiSettings().setZoomControlsEnabled(true);//googleMap.getUiSettings().setMyLocationButtonEnabled(true);//googleMap.getUiSettings().setCompassEnabled(true);googleMap.setOnMarkerClickListener(this);}@Overridepublic boolean onMarkerClick(Marker marker) {Toast.makeText(getContext(), marker.getTitle() + "이 클릭되었음", Toast.LENGTH_SHORT).show();return false;}}- 전북대학교의 GPS 좌표, Title, snippet을 포함하는 Marker 추가
- Marker가 클릭되면 Toast 출력