안녕하세요
현재 다음지도를 연동한 앱을 안드로이드 스튜디오에서 개발중입니다.
-
KaKaoDevelopers에서 앱 등록을 하여
네이티브 앱 키 발급 받고 키해시 값도 등록하였습니다. -
안드로이드 스튜디오에서 개발중인 앱을 실행하면 다음지도가 잘 나타납니다.
-
apk 파일을 추출하여 developer 에 등록하고 출시를 하였습니다.
출시된 앱을 실행하여 다음지도를 확인하면 지도는 나타나지 않고
화면 아래 오른쪽에 daum 표시만 나타납니다.지도가 나타나지 않는게 인증부분과 키해시 부분인거 같은 생각입니다.
AndroidManifest와 소스부분에는 네이티브앱키를 다 적용한거 같고
인증부분 역시 맞게 처리한거 같은데 지도가 나타나지를 않습니다.
키해시부분도 한번더 확인했습니다.
고수님들의 조언을 부탁드립니다.
아래는 관련소스입니다.
-
AndroidManifest.xml
meta-data android:name=“com.kakao.sdk.AppKey” android:value=“발급받은 네이티브 앱키 값” -
DaumMap.java
package com.jkm.daummap1;
import android.app.AlertDialog;
import android.content.ClipData;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.location.Address;
import android.location.Geocoder;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.view.View.OnClickListener;
import android.widget.Toast;
import com.skt.Tmap.TMapData;
import net.daum.mf.map.api.CalloutBalloonAdapter;
import net.daum.mf.map.api.MapPOIItem;
import net.daum.mf.map.api.MapPoint;
import net.daum.mf.map.api.MapPolyline;
import net.daum.mf.map.api.MapReverseGeoCoder;
import net.daum.mf.map.api.MapView;
import net.daum.mf.map.api.MapView.MapType;
import net.daum.mf.map.api.MapReverseGeoCoder;
import net.daum.mf.map.api.MapReverseGeoCoder.ReverseGeoCodingResultListener;
import net.daum.mf.map.api.MapView.CurrentLocationEventListener;
import net.daum.mf.map.api.MapView.MapViewEventListener;
import net.daum.mf.map.api.MapView.OpenAPIKeyAuthenticationResultListener;
import net.daum.mf.map.api.MapView.POIItemEventListener;
import net.daum.mf.map.api.MapCurrentLocationMarker;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
public class DaumMap extends FragmentActivity implements MapView.MapViewEventListener, MapReverseGeoCoder.ReverseGeoCodingResultListener
, MapView.POIItemEventListener, MapView.OpenAPIKeyAuthenticationResultListener {
String daumMapKey = "발급받은 네이티브 앱키";
MapPOIItem mMarker;
GpsInfo gps;
double latitude, longitude;
private static final String LOG_TAG = "SearchDemoActivity";
private MapView mMapView;
MapPoint.GeoCoordinate geoCoordinate_start;
MapPoint point_start;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.daum_map);
mMapView = new MapView(this);
mMapView.setDaumMapApiKey("daumMapKey");
// 인증
mMapView.setOpenAPIKeyAuthenticationResultListener(this);
// 지도 이벤트 감지함
mMapView.setMapViewEventListener(this);
// 마커 감지 이벤트
mMapView.setPOIItemEventListener(this);
ViewGroup mapViewContainer = (ViewGroup) findViewById(R.id.map_view);
mapViewContainer.addView(mMapView);
}
/**
* 키 인증 처리 결과
* 인증 성공시 현위치를 검색
*/
@Override
public void onDaumMapOpenAPIKeyAuthenticationResult(final MapView mapView, final int result, final String resultMessage) {
// 인증 성공시에 현위치 검색
init_point();
}
@Override
public void onMapViewInitialized(MapView mapView) {
}
@Override
public void onMapViewCenterPointMoved(MapView mapView, MapPoint mapCenterPoint) {
}
@Override
public void onMapViewDoubleTapped(MapView mapView, MapPoint mapPoint) {
}
@Override
public void onMapViewLongPressed(MapView mapView, MapPoint mapPoint) {
}
@Override
public void onMapViewSingleTapped(MapView mapView, MapPoint mapPoint) {
}
@Override
public void onMapViewDragStarted(MapView mapView, MapPoint mapPoint) {
}
@Override
public void onMapViewDragEnded(MapView mapView, MapPoint mapPoint) {
}
@Override
public void onMapViewMoveFinished(MapView mapView, MapPoint mapPoint) {
center_point();
}
@Override
public void onMapViewZoomLevelChanged(MapView mapView, int zoomLevel) {
}
@Override
public void onReverseGeoCoderFoundAddress(MapReverseGeoCoder mapReverseGeoCoder, String s) {
ed_addr.setText(s);
}
@Override
public void onReverseGeoCoderFailedToFindAddress(MapReverseGeoCoder mapReverseGeoCoder) {
// 호출에 실패한 경우.
}
@Override
public void onCalloutBalloonOfPOIItemTouched(MapView mapView, MapPOIItem mapPOIItem, MapPOIItem.CalloutBalloonButtonType calloutBalloonButtonType) {
}
@Override
@Deprecated
public void onCalloutBalloonOfPOIItemTouched(MapView mapView, MapPOIItem mapPOIItem) {
Toast.makeText(getApplicationContext(), "Balloon 선택함", Toast.LENGTH_LONG).show();
}
@Override
public void onDraggablePOIItemMoved(MapView mapView, MapPOIItem mapPOIItem, MapPoint mapPoint) {
Toast.makeText(getApplicationContext(), "마커 움직임", Toast.LENGTH_LONG).show();
}
@Override
public void onPOIItemSelected(MapView mapView, MapPOIItem mapPOIItem) {
Toast.makeText(getApplicationContext(), "마커 선택함", Toast.LENGTH_LONG).show();
}
/**
* 처음 지도에 중간지점을 찾음
* @author
*/
private void init_point() {
// 기존 마커 지우기
if (mMarker != null) {
mMapView.removeAllPOIItems();
}
//mMapView.removeAllPolylines();
gps = new GpsInfo(DaumMap.this);
// GPS 사용유무 가져오기
if (gps.isGetLocation()) {
latitude = gps.getLatitude() ;
longitude = gps.getLongitude() ;
accuracy = gps.getAccuracy();
// 현재위치 - 중심점
mMapView.setMapCenterPoint(MapPoint.mapPointWithGeoCoord(latitude, longitude), true);
// 줌 레벨 변경
mMapView.zoomIn(true);
mMapView.zoomOut(true);
ed_lat.setText(String.valueOf(latitude));
ed_long.setText(String.valueOf(longitude));
//ed_addr.setText(getAddress(latitude, longitude));
mMarker = new MapPOIItem();
mMarker.setItemName("위도 : " + String.valueOf(latitude) + " 경도: " + String.valueOf(longitude));
mMarker.setTag(0);
mMarker.setMapPoint(MapPoint.mapPointWithGeoCoord(latitude, longitude));
mMarker.setMarkerType(MapPOIItem.MarkerType.BluePin); // 기본으로 제공하는 BluePin 마커 모양.
mMarker.setSelectedMarkerType(MapPOIItem.MarkerType.RedPin); // 마커를 클릭했을때, 기본으로 제공하는 RedPin 마커 모양.
mMarker.setAlpha(0.7f);
mMarker.setDraggable(false);
mMapView.addPOIItem(mMarker);
}
}
}