Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 그룹채팅구현
- ERD툴
- EC2
- ERDTool
- androidstudio
- Flutter
- 채팅방구현
- Serial
- BLUETOOTH
- socket.io
- MotionLayout
- 서버배포
- PDFViewer
- DevExpress
- 개발일지
- android pdf viewer
- android studio
- node js
- Android
- cloudmessage
- socket통신
- firebase
- 암호화
- erdcloud
- provider
- 계층형 테이블
- node.js
- 상태관리
- FCM
- AWS
Archives
- Today
- Total
nueog
[Android Studio] Kakao Map API V2 적용 본문
반응형
기존 어플에 적용했던 카카오 지도를 v2 버전으로 업데이트 해야 해서 진행하였다!
https://apis.map.kakao.com/android_v2/docs/
위 게시물을 따라서 진행하였고 24년 6월에 기존 v1 지도가 지원종료를 한다는 공지에 1순위로 마이그레이션을 진행했다.
기존 v1 지도와 가장 크게 다른 점은 로딩속도인 것 같다.
현저히 !! 차이난다. 심지어 기존 v1지도에서는 로딩될 때 격자무늬로 깨지는데 v2에서는 그런 현상도 없는 것을 확인했다.
init 및 xml 레이아웃 적용방법은 기존 방식과 비슷하니 게시물을 잘 따라하면 된다.
v2 버전에서는 지도 객체에 라이프사이클이 생겼다!
map을 start 한 후에 callback함수로 destory, error, mapready 상태를 파악할 수 있다.
그리고 resume, onpause 등도 override 함수로 제공된다.
//지도 세팅
mapView = v.findViewById(R.id.map_view);
mapView.start(new MapLifeCycleCallback() {
@Override
public void onMapDestroy() {
// 지도 API 가 정상적으로 종료될 때 호출됨
Log.d(getTag(), "destroy");
}
@Override
public void onMapError(Exception error) {
// 인증 실패 및 지도 사용 중 에러가 발생할 때 호출됨
Log.d(getTag(), error.toString());
}
}, new KakaoMapReadyCallback() {
@Override
public void onMapReady(KakaoMap map) {
// 인증 후 API 가 정상적으로 실행될 때 호출됨
Log.d("", "onMapReady");
kakaoMap = map;
//클릭이벤트 활성화
kakaoMap.setPoiClickable(true);
setStore();
kakaoMap.setOnLabelClickListener(new KakaoMap.OnLabelClickListener() {
//label 클릭 시 실행
@Override
public void onLabelClicked(KakaoMap kakaoMap, LabelLayer layer, Label label) {
//polyline 초기화
if (robotRouteLine != null)
kakaoMap.getRouteLineManager().remove(robotRouteLine);
String Tag = "", Key = "";
try {
Tag = label.getTag().toString();
Key = label.getTexts()[0];
} catch (Exception e) {
Log.d("clickevent", e.toString());
}
if (Tag.equals(ROBOT_TAG)) { //로봇 선택: dialog 켜기
robotInfo = robotHash.get(Key);
infoLayout.setVisibility(View.VISIBLE);
robotBattBG.setVisibility(View.VISIBLE);
infoIcon.setImageResource(R.drawable.icon_robot_list);
infoName.setText(robotInfo.getRbSerial());
infoETC.setText("정비일: " + robotInfo.getRbManuDate());
infoDistance.setText(Distance.distance_string(GPSLocationManager.getLatitude(), GPSLocationManager.getLongitude(), Double.parseDouble(robotInfo.getLatitude()), Double.parseDouble(robotInfo.getLongitude())));
try {
switch (robotInfo.getRbState()) {
case "002":
infoState.setText("점포 이동 중");
break;
case "003":
infoState.setText("배달 중");
break;
case "004":
infoState.setText("정비 중");
break;
case "005":
infoState.setText("운행 중단");
break;
case "006":
infoState.setText("충전 중");
break;
case "007":
infoState.setText("수동 제어");
break;
default:
infoState.setText("정상 운행");
break;
}
} catch (NullPointerException e) {
infoState.setText("정상 운행");
}
rb_code = robotInfo.getRbCode();
st_code = null;
updatePolyline();
} else if (Tag.equals(STORE_TAG)) { //점포 선택: dialog 켜기
storeInfo = storeHash.get(Key);
infoLayout.setVisibility(View.VISIBLE);
robotBattBG.setVisibility(View.GONE);
infoIcon.setImageResource(R.drawable.ic_store_gray);
infoName.setText(storeInfo.getSt_name());
infoETC.setText("영업 시간: "+storeInfo.getSt_open() + " ~ " + storeInfo.getSt_close());
if (storeInfo.getSt_state().equals("A"))
infoState.setText("영업 중");
else if (storeInfo.getSt_state().equals("B"))
infoState.setText(storeInfo.getSt_open() + " 오픈");
else if (storeInfo.getSt_state().equals("C"))
infoState.setText("영업 마감");
else if (storeInfo.getSt_state().equals("D"))
infoState.setText("점포 휴무");
else
infoState.setText("영업 준비 중");
infoDistance.setText(Distance.distance_string(GPSLocationManager.getLatitude(), GPSLocationManager.getLongitude(), Double.parseDouble(storeInfo.getSt_latitude()), Double.parseDouble(storeInfo.getSt_longitude())));
rb_code = null;
st_code = storeInfo.getSt_code();
}
}
});
}
@Override
public LatLng getPosition() {
// 지도 시작 시 위치 좌표를 설정
return LatLng.from(GPSLocationManager.getLatitude(), GPSLocationManager.getLongitude());
}
@Override
public int getZoomLevel() {
// 지도 시작 시 확대/축소 줌 레벨 설정
return 15;
}
@Override
public String getViewName() {
// KakaoMap 의 고유한 이름을 설정
return "MyFirstMap";
}
@Override
public boolean isVisible() {
// 지도 시작 시 visible 여부를 설정
return true;
}
@Override
public String getTag() {
// KakaoMap 의 tag 을 설정
return "FirstMapTag";
}
});
반응형
'Android Studio' 카테고리의 다른 글
[Android Studio] Motion Layout을 이용한 레이아웃 동작 움직임 추가(접었다 폈다 하기) (0) | 2024.04.12 |
---|---|
[Android Studio][Zeplin] 앱 디자인 툴, Zeplin(제플린) (0) | 2024.04.08 |
Json Array 다루기 (0) | 2021.07.20 |
[Android Studio] bluetooth 사용 (0) | 2021.06.01 |
[Android Studio] Pdf Viewer (0) | 2021.04.13 |