작년이었나요. 네이버에서 제공하던 지도 API를 엔클라우드로 통합하여 운영한다고 발표했습니다. 그와 함께 새로운 지도API 버젼을 발표했는데요. 기존 버전 대비 신규 버전은 확실히 직관적이고, 간결하게 코드가 짜여질 수 있습니다.
기존 네이버 지도 API를 써보셨다면 아시겠지만 개발자 사이트에 있는 정보들이 다소 불친절합니다. 때문에 구글링을 통해 다른 개발자들이 올려놓은 코드를 보고 구현하곤 했는데요. 새롭게 출시된 네이버 지도(v3)는 직관적으로 코드가 구성되어 있어, 개발자 사이트만 보고도 충분히 구현이 가능했습니다. 기능도 더 다양해진 것 같고요. 아직 모든 기능을 사용해본 것은 아니지만, 우선 액티비티에 네이버 맵을 띄우는 과정에 대해 포스팅해보고자 합니다.
구성은 다음과 같습니다.
- AndroidManifest.xml
- MainActivity.java
- mainactivity.xml
구현하는 기능은 딱 하나입니다.
GPS 내위치를 보여주는 버튼을 만들기.
간단한 코드만으로 해당 버튼과 기능을 구현할 수 있습니다.
네이버 API 클라이언트 이용 신청
여기에서 클라이언트 이용 신청 방법에 대해 알 수 있습니다. 기존 버젼과 유사한 방식으로 아이디를 발급받으면 됩니다. 기본적인 Gradle 등록 절차까지 마무리한 후, 아래 코드 부분을 보면 됩니다.
AndroidManifest.xml
안드로이드 manifest에 다음 내용을 입력합니다.
<manifest>
<application>
<meta-data
android:name="com.naver.maps.map.CLIENT_ID"
android:value="YOUR_CLIENT_ID_HERE" />
</application>
</manifest>
|
cs |
YOUR_CLIENT_ID_HERE
부분에 발급받은 아이디값을 부여합니다.
mainactivity.xml
<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">
<com.naver.maps.map.MapView
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</com.naver.maps.map.MapView>
<com.naver.maps.map.widget.LocationButtonView
android:id="@+id/locationbuttonview"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="100dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
</com.naver.maps.map.widget.LocationButtonView>
</ConstrainLayout>
|
cs |
xml에 네이버지도 MapView
를 추가하고, 아이디를 map_view
로 저장합니다. 위치 버튼인 LocationButtonView
를 추가하고, 아이디를 locationbuttonview
로 저장합니다.
MainActivity.java
public class MainActivity extends Activity implements OnMapReadyCallback {
// NaverMap API 3.0
private MapView mapView;
private LocationButtonView locationButtonView;
// FusedLocationSource (Google)
private static final int LOCATION_PERMISSION_REQUEST_CODE = 1000;
private FusedLocationSource locationSource;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainactivity);
mapView = findViewById(R.id.map_view);
mapView.onCreate(savedInstanceState);
naverMapBasicSettings();
}
public void naverMapBasicSettings() {
mapView.getMapAsync(this);
//내위치 버튼
locationButtonView = findViewById(R.id.locationbuttonview_post);
// 내위치 찾기 위한 source
locationSource = new FusedLocationSource(this, LOCATION_PERMISSION_REQUEST_CODE);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (locationSource.onRequestPermissionsResult(requestCode, permissions, grantResults)) {
return;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
public void onMapReady(@NonNull final NaverMap naverMap) {
//naverMap.getUiSettings().setLocationButtonEnabled(true);
locationButtonView.setMap(naverMap);
// Location Change Listener을 사용하기 위한 FusedLocationSource 설정
naverMap.setLocationSource(locationSource);
naverMap.setLocationTrackingMode(LocationTrackingMode.NoFollow);
}
@Override
protected void onStart() {
super.onStart();
mapView.onStart();
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
@Override
protected void onStop() {
super.onStop();
mapView.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
mapView.onLowMemory();
}
}
|
cs |
onMapReady
메소드 안에 지도 관련 설정들을 넣어줘야 값을 못받는 에러가 발생하지 않습니다.
위와 같이 구성 후, 앱을 실행하면 지도와 내 위치표기 버튼이 동작하는 것을 보실 수 있습니다.
(개발 중 일부만 발췌해서 포스팅하는 것이기 때문에, 일부 오류가 있을 수 있습니다.)
'Developer > Android, Java' 카테고리의 다른 글
[안드로이드] EndlessRecyclerViewScrollListener 적용하기 (293) | 2019.05.21 |
---|---|
[안드로이드] recyclerView에서 Activity로 인텐트 값 넘기기 (269) | 2019.05.21 |
[안드로이드] Retrofit 기본 예제 (서버 통신) (260) | 2019.03.21 |
[안드로이드] EditText 키보드 숨기는 기능 (자동으로 키보드 뜨는 것 방지) (258) | 2019.03.19 |
[안드로이드] ConstraintLayout, Guideline을 이용하여 삽입 개체 크기 비율 조절 (271) | 2019.03.19 |
댓글