1. 프로젝트 생성
1.1 프로젝트 만들기
전에 google map을 사용할 수 있는 API key를 생성했는데요.
[안드로이드] google map 사용을 위한 API 키 생성(2018.11)
이제 키가 잘 작동 하는지 테스트를 해보겠습니다.
안드로이드 프로젝트를 하나 생성 합니다.
MapTest 이라는 이름으로 생성을 하겠습니다.
프로젝트 명을 입력하는 화면 하단에 Package name이 있습니다.
com.example.컴퓨터이름.프로젝트명 이런식으로 나타나는데 [Edit] 버튼을 누르면 편집이 가능 합니다.
필요하면 편집을 하고 [Done] 버튼을 누르면 반영이 됩니다.
com.android.google.maptest 이렇게 변경을 해 보았습니다.
Android 4.0으로 선택을 했는데 각자 알아서 선택을 하면 됩니다.
Empty Activity를 선택 합니다.
모두 기본으로 놓았는데 변경이 필요하면 수정 합니다.
이제 [Finish] 버튼을 눌러 프로젝트를 생성 합니다.
수정한 Package name으로 생성이 되었는지 확인해 볼까요?
잘 되어 있군요.
1.2 패키지 이름 등록
새로 만든 프로젝트에서 구글 맵을 사용 하려면 패키지 이름을 API 키에 등록해야 합니다.
google에 로그인을 하고 https://console.developers.google.com 에 접속 합니다.
사용자 인증 정보 만들기에서 API키 1을 선택 합니다. 등록할 때 이름을 변경 했다면 다른 이름이겠죠.
라디오 버튼 중 Android 앱을 선택합니다.
[+ 패키지 이름 및 지문 추가]를 선택하면 패키지 이름과 SHA-1 인증서 지문이 하나 추가 됩니다.
신규 생성한 내용을 추가 합니다.
빨간색 박스가 이번에 만든 패키지와 인증서 지문 입니다.
[저장] 버튼을 선택 하면 패키지 이름으로 생성된 프로젝트 에서 지도를 사용할 수 있습니다.
2. 프로젝트 개발
2.1 API 키 등록
구글 맵을 사용하기 위한 키를 등록 해야 권한을 이용 하여 앱에 지도가 표시 됩니다.
AndroidMainifest.xml
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="생성된
API 키 입력" />
2.2 Layout 작성
activity_main.xml
지도를 표시할 fragment 를 추가합니다.
그런데 빨간색으로 오류가 나오는 군요.
map 관련 class가 없어서 발생 하니 추가해야 합니다.
build.gradle 에
implementation 'com.google.android.gms:play-services:10.0.1'
를 추가 합니다.
그러면 상단에 Sync를 맞추라고 합니다. [Sync Now]를 클릭 합니다.
다시 activity_main.xml에 가봅니다.
빨간색이 없어졌습니다.
2.3 지도 사용
이제 지도를 그려 보겠습니다.
MainActivity.java 에 implements OnMapReadyCallback를 이용해 보겠습니다.
onCreate()함수에 Fragment를 추가 하고
FragmentManager fragmentManager =
getFragmentManager();
MapFragment mapFragment =
(MapFragment)fragmentManager
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
onMapReady() 함수에 지도를 그려줍니다. OnMapReadyCallback이걸 추가하면 map 기능이 추가되어서 onMapReady() 함수에서 작업하면 됩니다. 이 함수에서 정거장 위치, 약속장소등을 어떻게 표시하는지 기회가 되면 설명 드리겠습니다.
@Override
public void onMapReady(final GoogleMap map) {
LatLng SEOUL = new LatLng(37.56, 126.97);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(SEOUL);
markerOptions.title("서울");
markerOptions.snippet("한국 수도");
map.addMarker(markerOptions);
map.moveCamera(CameraUpdateFactory.newLatLng(SEOUL));
map.animateCamera(CameraUpdateFactory.zoomTo(14));
}
실행을 해볼까요?
아직 오류가 발생합니다.
Error: Program type already present: android.support.v4.app.BackStackRecord$Op
android.support.v4 오류이군요.
gradle에 아래 내용을 추가 합니다.
implementation 'com.android.support:support-v4:27.1.0'
오류가 없어졌습니다.
왔다 갔다. 이것 저것 추가하고 혼란 스러운가요?
하단에 추가한 전체 소스가 그리 길지 않습니다.
전체 소스를 보면서 읽으면 별거 없습니다.
2.4 결과
이제 잘 나오는 군요.
지도의 좌표를 임의로 설정해서 나온 결과 입니다.
다음 번에는 핸드폰의 위치를 지도에 표시 해보도록 하겠습니다.
3. Source Code
3.1 AndroidManifest.xml
개인이 발급 받은 API 키 값을 넣으세요.
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.google.maptest"> <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="AIzxxxxx API 키 값xxxxxxxxxx_L8" /> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
3.2 activity_main.xml
<?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=".MainActivity"> <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.MapFragment" /> </android.support.constraint.ConstraintLayout>
3.3 build.gradle
apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "com.android.google.maptest" minSdkVersion 14 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.google.android.gms:play-services:10.0.1' implementation 'com.android.support:support-v4:27.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
3.4 MainActivity.java
package com.android.google.maptest; import android.app.FragmentManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapFragment; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager fragmentManager = getFragmentManager(); MapFragment mapFragment = (MapFragment)fragmentManager .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(final GoogleMap map) { LatLng SEOUL = new LatLng(37.56, 126.97); MarkerOptions markerOptions = new MarkerOptions(); markerOptions.position(SEOUL); markerOptions.title("서울"); markerOptions.snippet("한국 수도"); map.addMarker(markerOptions); map.moveCamera(CameraUpdateFactory.newLatLng(SEOUL)); map.animateCamera(CameraUpdateFactory.zoomTo(14)); } }
- copy coding -
'Android' 카테고리의 다른 글
[android] 안드로이드 버튼(1) onClick() 함수 사용 방법 (0) | 2018.12.06 |
---|---|
[안드로이드] emulator: ERROR: x86 emulation currently requires hardware acceleration! (0) | 2018.12.04 |
[안드로이드] google map 사용을 위한 API 키 생성(2018.11) (0) | 2018.12.02 |
안드로이드 GPS를 이용한 속도 측정 (7) | 2018.11.21 |
android GPS,Network 이용 좌표 얻기 (GPS_PROVIDER, NETWORK_PROVIDER) (4) | 2018.11.19 |