MyCloud

[안드로이드] Daum 지도 API 연동 시 발생하는 문제 본문

Programming/Android

[안드로이드] Daum 지도 API 연동 시 발생하는 문제

Swalloow 2016. 6. 29. 01:45



Daum Maps API


처음 Daum 지도 API를 사용하시게 되면 여러 문제를 만날 수도 있습니다.

그래서 Daum 지도 API를 연동하면서 겪은 문제를 정리하려고 합니다.



1.

우선 키 발급받는 과정입니다. 

간단한 과정이라 API 페이지에 따로 언급이 없습니다.



http://developers.daum.net/console/

위 링크의 다음 개발자 페이지의 좌측 상단에 앱 만들기 버튼을 눌러 내 프로젝트를 생성해야 합니다.

그리고 나면 자동으로 키가 발급됩니다.

이 때 안드로이드 패키지 명은 com.company.projectName 형식으로 들어가면 됩니다.

* 잘 모르겠다면 AndroidManifest.xml 에 있는 package = " " 부분을 보시면 됩니다.








2.

라이브러리를 추가해야 할 때 가이드 문서를 보면 오류가 나는 경우가 많습니다.

저는 http://developljy.tistory.com/11 이 링크의 도움을 받았습니다.



결과적으로 libs 라는 폴더에는 libDaumMapAndroid.jar 파일을 넣고

나머지 armeabi 폴더에 있는 .so 파일들은 main 디렉토리 하위에 넣어 해결했습니다.



 






3.

마시멜로 버전부터 적용되는 권한 체크 문제입니다.

분명히 Manifest.xml 에 ACCESS_FINE_LOCATION 권한을 추가했는데 이러한 오류가 발생할 것입니다.

java.lang.SecurityException: "gps" location provider requires ACCESS_FINE_LOCATION permission.


API level 23 부터는 사용자의 사생활 침해 문제로 인해 권한 체크가 필수가 되었습니다.

따라서 사용자는 앱 설치 후, 위치정보나 카메라 등 접근권한을 동의해야만 사용가능합니다.

그 중에서 위치정보를 받는 권한은 필수 권한이기 때문에 체크를 하지 않으면 오류가 발생합니다.


이를 해결하기 위한 제일 간단한 방법은 targetSdkVersion을 23으로 낮추는 방법인데, 

마시멜로 버전 지원이 안되기 때문에 권하지 않습니다.


따라서 보통 다이얼로그를 띄워 권한을 체크하는 것으로 해결합니다.

권한 체크에 대한 안드로이드 공식 문서는 아래의 링크를 참고

https://developer.android.com/training/permissions/requesting.html


저는 TedPermission이라는 박상권님의 권한체크 라이브러리를 사용해서 해결했습니다.

라이브러리 소개 링크 : http://gun0912.tistory.com/61


실제 적용된 코드는 다음과 같습니다.

public class MainActivity extends AppCompatActivity {

static final String API_KEY = "please edit your api key";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// Using TedPermission library
PermissionListener permissionlistener = new PermissionListener() {
@Override
public void onPermissionGranted() {
Toast.makeText(MainActivity.this, "권한 허가", Toast.LENGTH_SHORT).show();

// MapView 객체생성 및 API Key 설정
MapView mapView = new MapView(MainActivity.this);
mapView.setDaumMapApiKey(API_KEY);

RelativeLayout mapViewContainer = (RelativeLayout) findViewById(R.id.map_view);
mapViewContainer.addView(mapView);

// 중심점 변경
mapView.setMapCenterPoint(MapPoint.mapPointWithGeoCoord(37.53737528, 127.00557633), true);

// 마커 생성 및 설정
MapPOIItem marker = new MapPOIItem();
marker.setItemName("Default Marker");
marker.setTag(0);
marker.setMapPoint(MapPoint.mapPointWithGeoCoord(37.53737528, 127.00557633));
marker.setMarkerType(MapPOIItem.MarkerType.BluePin); // 기본으로 제공하는 BluePin 마커 모양.
marker.setSelectedMarkerType(MapPOIItem.MarkerType.RedPin); // 마커를 클릭했을때, 기본으로 제공하는 RedPin 마커 모양.
mapView.addPOIItem(marker);
}

@Override
public void onPermissionDenied(ArrayList<String> deniedPermissions) {
Toast.makeText(MainActivity.this, "권한 거부\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
}

};

new TedPermission(this)
.setPermissionListener(permissionlistener)
.setRationaleMessage("지도 서비스를 사용하기 위해서는 위치 접근 권한이 필요해요")
.setDeniedMessage("왜 거부하셨어요...\n하지만 [설정] > [권한] 에서 권한을 허용할 수 있어요.")
.setPermissions(Manifest.permission.ACCESS_FINE_LOCATION)
.check();
}

}



프로젝트 코드는 아래의 GitHub 주소에서 받으실 수 있습니다.

https://github.com/Swalloow/AndroidStudy/tree/master/MyDaumMap




Comments