구글맵을 사용하기에 앞서서 먼저 API KEY가 필요하다.
https://developers.google.com/maps/documentation/android-api/signup?hl=ko
[공식 문서]
상단의 페이지를 통해서 API 키를 가져올 수 있다.
가지고 온 키는 다음 위치에 추가한다.
(value의 String이 아니다.)
[gradle.properties 에 추가한다]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | apply plugin: 'com.android.application' android { compileSdkVersion 26 buildToolsVersion "26.0.0" defaultConfig { ... resValue "string", "google_maps_key", (project.findProperty("GOOGLE_MAPS_API_KEY") ?: "") ... } } dependencies { ... compile 'com.google.android.gms:play-services:11.0.2' ... } | cs |
[build.gradle에는 주황색으로 되어있는 부분을 추가한다]
play-services의 버전은 안드로이드 스튜디오 환경마다 권장하는게 다를 수 있다.
그리고 AndroidManifest.xml 에 다음과 같이 추가한다.
application을 닫기 전에 추가해야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/google_maps_key"/> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> | cs |
+a
모든 설정을 끝마친 다음 아까 API 키를 받은
[https://console.developers.google.com]
에서 SHA-1 인증서 지문을 추가한다.
(안해도 동작은 하는 것 같은데 ...)
Android Studio의 Terminal에 써있는대로 입력해도 되고
만약에 없다고 에러가 발생하는 분은
keytool -list -v -keystore c:/users/cmtyx/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
빨간 부분에 자신의 경로를 입력하고 사용하면 된다.
[debug.keystore는 자동으로 생성되는 것이라고 한다]
+추가
일반 지도 예제는 문제없이 사용 가능하지만 다른 맵 기능을 사용하기 위해서는
API Console의 라이브러리에서 따로 사용설정을 해줘야 한다.
이제 기본적인 설정은 끝났고 테스트를 위해 다음과 같이 작성하면 된다.
[activity_main.xml]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.tistory.puzzleleaf.boostmap.MainActivity"> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toRightOf="parent" /> </android.support.constraint.ConstraintLayout> | cs |
[MainActivity.class]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { LatLng sydney = new LatLng(-33.852, 151.211); googleMap.addMarker(new MarkerOptions().position(sydney) .title("Marker in Sydney")); googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); } } | cs |
LatLng에 써있는 -33.852, 151.211 위치에 마커를 추가하고 그쪽으로 지도의 카메라를 이동시킵니다.
https://developers.google.com/maps/documentation/android-api/controls?hl=ko
지도에서 우측에 +,- 버튼과 상단에 현재 위치를 찾아가는 버튼을 설정하기 위해서 아래와 같이 설정한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | @Override public void onMapReady(GoogleMap googleMap) { //우측 상단에 위치 버튼 if (ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) { googleMap.setMyLocationEnabled(true); googleMap.getUiSettings().setMyLocationButtonEnabled(true); } ... //+,- 버튼 googleMap.getUiSettings().setZoomControlsEnabled(true); ... } | cs |
상단의 위치버튼을 나타내기 위해서는 Permission을 설정해야 나타나게 된다.
1 2 | <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> | cs |
1 2 3 4 5 6 7 8 9 10 11 | private void setPermission(){ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1); ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1); return; } } | cs |
[Permission 추가를 위한 간단한 코드]
1 2 | googleMap.addMarker(new MarkerOptions().position(mkLatLng) .title(temp.getName()).snippet(temp.getAddress()).draggable(true)); | cs |
[추가하는 Marker에 Drag 가능한 속성을 추가한다]
1 2 3 4 5 6 7 8 9 10 11 | googleMap.setOnMarkerDragListener(new GoogleMap.OnMarkerDragListener() { @Override public void onMarkerDragStart(Marker marker) { } @Override public void onMarkerDrag(Marker marker) { } @Override public void onMarkerDragEnd(Marker marker) { } }); | cs |
[Marker Drag를 위한 코드]
구글 맵에서 주소를 검색할 수 있는 장소 자동완성 기능을 제공한다.
Google Place API 를 이용하면 사용이 가능하다.
[https://console.developers.google.com 에서 사용 설정을 하지 않으면 제대로 동작하지 않는다.]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ... Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN).build(getActivity()); startActivityForResult(intent, SEARCHADDRESS); ... @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == SEARCHADDRESS) { if (resultCode == RESULT_OK) { Place place = PlaceAutocomplete.getPlace(getContext(), data); //장소 정보를 얻어옴 } else { } } } ... | cs |
'Android 기법 > # Study' 카테고리의 다른 글
[Android]Glide와 Picasso (0) | 2017.07.19 |
---|---|
[Android]Background Tasks (0) | 2017.07.18 |
[Android]KenBurnsView 와 PanoramaImageView 사용하기 (0) | 2017.07.15 |
FragmentPagerAdapter와 FragmentStatePagerAdapter (0) | 2017.07.11 |
[Android/안드로이드]RecyclerView 헤더 쉽게 만들기 (0) | 2017.07.06 |
댓글