구글맵 사용하기(Activity 이용)
- 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/activity_googlemap.xml 생성
123456<?xml version="1.0" encoding="utf-8"?><fragment xmlns:android="http://schemas.android.com/apk/res/android"android:name="com.google.android.gms.maps.SupportMapFragment"android:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent" /> - ActivityGoogleMap.java 생성
123456public class ActivityGoogleMap extends AppCompatActivity implements OnMapReadyCallback{@Overridepublic void onMapReady(GoogleMap googleMap) {}}- AppCompatActivity 상속
- OnMapReadyCallback 인터페이스 구현 -> onMapReady() 자동생성
- ActivityGoogleMap.java 수정 : onCreate() 메소드 생성
12345678910111213141516public class ActivityGoogleMap extends AppCompatActivity implements OnMapReadyCallback{@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_googlemap);SupportMapFragment mapFragment =(SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);mapFragment.getMapAsync(this);}@Overridepublic void onMapReady(GoogleMap googleMap) {}} - AndroidManifest.xml 수정
123456789101112131415161718192021<?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><activity android:name=".ActivityGoogleMap"/></application></manifest>- <uses-permission … : 인터넷 허용
- <meta-data … : 구글 맵 키 등록
- <activity android:name=”.ActivityGoogleMap … : 액티비티 등록
- /res/menu/activity_main_drawer.xml 수정
12345678910<?xml version="1.0" encoding="utf-8"?><menu><group android:checkableBehavior="single"><itemandroid:id="@+id/nav_activity_googlemap"android:icon="@drawable/ic_menu_camera"android:title="Google Map(Activity)" />......</group></menu> - MainActivity.java 수정
123456789101112131415161718192021public class MainActivity extends AppCompatActivityimplements NavigationView.OnNavigationItemSelectedListener {@SuppressWarnings("StatementWithEmptyBody")@Overridepublic boolean onNavigationItemSelected(MenuItem item) {// Handle navigation view item clicks here.int id = item.getItemId();if (id == R.id.nav_activity_googlemap) {Intent intent = new Intent(this, ActivityGoogleMap.class);startActivity(intent);} else if (id == R.id.nav_gallery) {......}DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);drawer.closeDrawer(GravityCompat.START);return true;}}- 실행시키고 “Google Map(Activity)” 메뉴를 선택하면 구글 지도가 나타남
- 나타나지 않으면 오류가 있으니 수정하고 다음으로 넘어감
- ActivityGoogleMap.java 수정 : onMapReady() 메소드 수정
1234567891011121314151617181920public class ActivityGoogleMap extends AppCompatActivity implements OnMapReadyCallback{@Overrideprotected void onCreate(@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() 완성
1234567891011121314151617181920212223242526272829303132333435public class ActivityGoogleMap extends AppCompatActivityimplements OnMapReadyCallback, GoogleMap.OnMarkerClickListener{@Overrideprotected void onCreate(@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(this, marker.getTitle() + "이 클릭되었음", Toast.LENGTH_SHORT).show();return false;}}- 전북대학교의 GPS 좌표, Title, snippet을 포함하는 Marker 추가
- Marker가 클릭되면 Toast 출력