일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 추천인
- 캐시슬라이드
- 행퀴
- 오퀴즈
- 캐시워크정답
- spring게시판
- 이벤트
- 오늘의퀴즈
- 행운퀴즈
- 안드로이드
- java
- ㄹㅂㅁㅇㅌ
- 초성퀴즈
- 초성퀴즈정답
- 비트코인
- Android
- TOSS
- 퀴즈
- 돈버는퀴즈
- 캐웤
- 캐시워크
- 토스
- 톹
- 토스정답
- 오퀴즈정답
- 자바
- 행운퀴즈정답
- 캐슬
- 리브메이트
- 정답
- Today
- 252,060
- Total
- 18,363,256
Gomdori
[Android] 안드로이드 카카오맵뷰(Kakao MapView) 연동하기(하얀 화면,흰화면) 본문
안녕하세요.
Kakao Developer에서 지원하는 카카오 맵뷰(Kakao MapView)연동 방법입니다.
안드로이드 카카오 SDK 연동
홈페이지에서 SDK를 받은 후 다음 그림과 같이 넣어주시면 됩니다.
Manifests
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:appComponentFactory="androidx.core.app.CoreComponentFactory"
android:extractNativeLibs="false"
android:icon="@drawable/ic_launcher_round"
android:label="label"
android:roundIcon="@drawable/ic_launcher_round"
android:supportsRtl="true"
android:testOnly="true"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
<meta-data android:name="com.kakao.sdk.AppKey" android:value="카카오 API Key"/>
</application>
<application></application> 태그 안에 <meta-data>를 넣어주셔야 합니다.
<meta-data android:name="com.kakao.sdk.AppKey" android:value="카카오 API Key"/>
Gradle(Project)
buildscript {
repositories {
google()
jcenter()
mavenCentral()
maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/'}
maven{
url "https://maven.google.com"
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.3'
classpath 'com.google.gms:google-services:4.3.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
maven { url "https://jitpack.io" }
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
repositoried{} 안에
maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/'}
이걸 넣어주세요
Gradle(Module)
dependencies {
~~~~~~~~~~~~~
implementation files('libs/libDaumMapAndroid.jar')
~~~~~~~~~~~~~
}
Layout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Activity
import net.daum.mf.map.api.MapPOIItem;
import net.daum.mf.map.api.MapPoint;
import net.daum.mf.map.api.MapView;
public class KakaoMapViewActivity extends AppCompatActivity {
public String KakaoMapAPI = "카카오 API Key";
public MapView mMapView;
public MapPoint mapPoint;
public LocationManager lm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.activity_kakaomapview );
getKeyHash( getApplicationContext() );
mMapView = new MapView( this );
ViewGroup mapViewContainer = findViewById( R.id.map_view );
mMapView.setDaumMapApiKey( KakaoMapAPI );
mapViewContainer.addView( mMapView );
mMapView.removeAllPOIItems();
System.out.println( "================getKey:" + getKeyHash( getApplicationContext() ) );
MapMarker("마커에 찍을 내용",location_detail,경도,위도);
MapMarker("마커에 찍을 내용",location_detail,경도,위도);
Handler mHandler = new Handler();
mHandler.postDelayed( new Runnable() {
public void run() {
// 3초 후에 현재위치를 받아오도록 설정 , 바로 시작 시 에러납니다.
mMapView.setCurrentLocationTrackingMode( MapView.CurrentLocationTrackingMode.TrackingModeOnWithHeading );
}
}, 4000 ); // 1000 = 1초
lm = (LocationManager) getApplicationContext().getSystemService( Context.LOCATION_SERVICE );
}
public void Marker(String MakerName, double startX, double startY) {
mapPoint = MapPoint.mapPointWithGeoCoord( startY, startX );
mMapView.setMapCenterPoint( mapPoint, true );
//true면 앱 실행 시 애니메이션 효과가 나오고 false면 애니메이션이 나오지않음.
MapPOIItem marker = new MapPOIItem();
marker.setItemName(MakerName); // 마커 클릭 시 컨테이너에 담길 내용
marker.setMapPoint( mapPoint );
// 기본으로 제공하는 BluePin 마커 모양.
marker.setMarkerType( MapPOIItem.MarkerType.RedPin );
// 마커를 클릭했을때, 기본으로 제공하는 RedPin 마커 모양.
marker.setSelectedMarkerType( MapPOIItem.MarkerType.BluePin );
mMapView.addPOIItem( marker );
}
public void MapMarker(String MakerName, String detail, double startX, double startY) {
mapPoint = MapPoint.mapPointWithGeoCoord( startY, startX );
mMapView.setMapCenterPoint( mapPoint, true );
//true면 앱 실행 시 애니메이션 효과가 나오고 false면 애니메이션이 나오지않음.
MapPOIItem marker = new MapPOIItem();
marker.setItemName(MakerName+"("+detail+")"); // 마커 클릭 시 컨테이너에 담길 내용
marker.setMapPoint( mapPoint );
// 기본으로 제공하는 BluePin 마커 모양.
marker.setMarkerType( MapPOIItem.MarkerType.RedPin );
// 마커를 클릭했을때, 기본으로 제공하는 RedPin 마커 모양.
marker.setSelectedMarkerType( MapPOIItem.MarkerType.BluePin );
mMapView.addPOIItem( marker );
}
public String getKeyHash(final Context context) {
PackageInfo packageInfo = Utility.getPackageInfo( context, PackageManager.GET_SIGNATURES );
if (packageInfo == null)
return null;
for (Signature signature : packageInfo.signatures) {
try {
MessageDigest md = MessageDigest.getInstance( "SHA" );
md.update( signature.toByteArray() );
return Base64.encodeToString( md.digest(), Base64.NO_WRAP );
} catch (NoSuchAlgorithmException e) {
System.out.println( "디버그 keyHash" + signature );
}
}
return null;
}
}
키 해시(Key Hash)값 얻기
public String getKeyHash(final Context context) {
PackageInfo packageInfo = Utility.getPackageInfo( context, PackageManager.GET_SIGNATURES );
if (packageInfo == null)
return null;
for (Signature signature : packageInfo.signatures) {
try {
MessageDigest md = MessageDigest.getInstance( "SHA" );
md.update( signature.toByteArray() );
return Base64.encodeToString( md.digest(), Base64.NO_WRAP );
} catch (NoSuchAlgorithmException e) {
System.out.println( "디버그 keyHash" + signature );
}
}
return null;
}
해당 키 해시 값이 나오면, Kakao Developer에 가서 [플랫폼] 탭에서 키 해시값을 등록할 수 있습니다.
등록안하시면 연동안되니 꼭 해주셔야 합니다.
주의사항
import net.daum.mf.map.api.MapPOIItem;
import net.daum.mf.map.api.MapPoint;
import net.daum.mf.map.api.MapView;
주의사항
Activity에서 잘못된 import 시 연동이 안됩니다.
꼭 저 위에 있는 것처럼 import를 해주셔야합니다.
카카오맵뷰(kakao MapView) 연동 시 하얀 화면 혹은 흰 화면이 나올 때가 있는 데,
API Key가 잘못되어 그런 현상이 나오는 겁니다.
Kakao API Key만 정확히 입력해주시고, 키해시(Key hash)값까지 정확히 해주시면
정상적으로 kakao mapView 연동이 될 겁니다.
감사합니다.