ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 다음(카카오) 지도 안드로이드 API 사용하는 방법 & 현재 위치 표시
    Android/카카오(다음) 지도 2019. 9. 26. 11:53





    다음(카카오) 지도를 안드로이드에서 사용하기 위해 필요한 작업과  지도에 현재 위치를 표시하는 예제를 포함하고 있습니다.

    .

    최초 작성 2019. 3. 6

    최종 작성 2019. 9. 26




    준비 작업부터 앱 실행까지 설명합니다.  틀린 점이 있으면 댓글로 남겨주세요.


    1. 카카오 개발자 사이트에 접속하여 카카오 계정으로 로그인합니다.

    https://developers.kakao.com





    2. 개발자 등록을 합니다.





    3. 앱 만들기를 합니다. 이름에 실제 앱 이름을 입력하지 않아도 됩니다. 





    4. 생성된 키를 보여줍니다. 따로 복사해둡니다. 





    5. 왼쪽에 보이는 항목에서 일반을 선택합니다.





    6. 플랫폼 추가를 선택합니다.





    7. Android를 체크하고 패키지명을 입력하고 빈 공간을 클릭하면 마켓 URL은 자동으로 입력됩니다. 





    8. OpenSSL을 설치합니다.

     https://slproweb.com/products/Win32OpenSSL.html 에서 Win64 OpenSSL  항목에 있는 것을 다운로드 받으세요.  


    C:\Program Files\OpenSSL-Win64\bin를 시스템 변수 path에 추가하여 명령 프롬프트에서 openssl을 실행할 수 있도록 합니다. 





    9. 명령 프롬프트에서 다음 명령으로  디버그용 해시키를 얻습니다. 따로 복사해두세요


    keytool -exportcert -alias androiddebugkey -keystore "%USERPROFILE%\.android\debug.keystore" -storepass android -keypass android | openssl sha1 -binary | openssl base64





    10. 릴리즈용 해시키를 얻으려면 추가 작업이 필요합니다.  

    앞에서 지정한 패키지 이름으로 프로젝트를 만들고  빌드해서 앱을 스마트폰에 업로드를 한 후 진행해야합니다. 

    안드로이드 스튜디오의 메뉴에서 Build > Generate Signed Bundle / APK를 선택합니다. 




    11. 앱스토어에 올릴게 아니므로 APK를 선택했습니다. Android App Bundle은 추후 테스트해볼 예정입니다. 





    12. 새로운 키 스토어를 생성하기 위해 Create new 버튼을 선택합니다. 





    13. key store path에 경로와 파일 이름을 지정해줍니다.

    이미 생성된 확장자가 jsk인 파일을 지정해주는게 아니라 새로 확장자 jsk인 파일을 만드는 겁니다. 


    아래쪽에 보이는 Password 항목에 비밀번호를 지정해줍니다.

    Alias에는 키에 대한 적당한 별칭을 적어줍니다. 그 아래에 보이는 Password 항목에 비밀번호를 지정해줍니다.

    Certificate에서 항목 하나만 기입하면 됩니다





    14. 다음처럼 항목이 자동으로 채워집니다.





    15. Build Variants에서 debug와 release 모두 선택 한 후, V2를 체크해주었습니다. 





    16. 에러가 날 수 있는데 다시 해보면 됩니다.




    17. 이제 릴리즈용 해시키를 가져옵니다. <release_key_alias>와 <release_keystore_path>는 앞에서 지정해주었던 별칭과 경로를 적어주면 됩니다. 

    앞에서 지정했던 암호를 입력해주어야 해시키를 얻을 수 있습니다. 따로 복사해두세요. . 


    keytool -exportcert -alias <release_key_alias> -keystore <release_keystore_path> | openssl sha1 -binary | openssl base64

    keytool -exportcert -alias webnautes -keystore "%USERPROFILE%\.android\debug.keystore" | openssl sha1 -binary | openssl base64





    18. 키 해시에 릴리즈용, 디버그용을 입력하고 저장을 선택합니다. 

    현재 페이지에서 네이티브 앱 키와 패키지 명, 키해시는 따로 저장해두어야 합니다. 





    19.  http://apis.map.daum.net/android/guide/ 에서 API SDK를 다운로드 받습니다. 

    글 작성 시점에서 최신 버전은  2019년 7월 22일에 배포된 1.4.0.0입니다. 





    20. 압축을 풀어 libs 폴더에 있는 폴더와 파일을 복사하여




    앱 프로젝트의 app\src\main경로에  jniLibs 폴더를 생성한 후 붙여넣기 해줍니다.






    21. AndroidManifest.xml 매니페스트 파일에 다음 권한을 추가합니다. 인터넷 접근 권한과 위치 정보 접근 권한입니다. 


    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.tistory.webnautes.kakao_map_test">

        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

       <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"




    22.  <application> 태그 하위요소로 <meta-data> 태그를 사용하여 복사해둔 네이티브 앱 키를 입력해줍니다.



        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">

            <meta-data
                android:name="com.kakao.sdk.AppKey"
                android:value="네이티브 앱 키"/>
           
            <activity android:name=".MainActivity">




    23. 메뉴에서 File > Project Structure를 선택합니다. 


    왼쪽 항목에서 Dependencies를 선택합니다.






    app을 선택하고 빨간색 사각형으로 표시한  + 아이콘을 클릭합니다. 






    24. 메뉴에서 Jar dependency를 선택합니다.





    25. 복사해두었던 libDaumMapAndroid.jar를 추가로 입력하고 OK 버튼을 클릭합니다.





    26. 이제 jar 파일이 프로젝트에 추가되었습니다. 





    27. 이제 http://apis.map.daum.net/android/sample/ 에서 제공하는 다음 지도 샘플을 사용해볼 수 있습니다.


    다음은 샘플에서 가져온 지도에 현재 위치 보여주는 예제입니다.  

    전체 코드는 LocationDemoActivity.java 파일을 참고하세요. 



    실행시켜보면 위치 정보에 대한 런타임 퍼미션을 허용할지 물어봅니다. 

    허용시 지도에 현재 위치와 바라보고 있는 방향을 보여줍니다.


     



    다음 지도에서 제공하는 모드 테스트시 다음 한줄을 변경하면 됩니다. 코드에 두 군데 존재합니다.

    가능한 모드는 샘플 앱에 있는  LocationDemoActivity.java 파일에 있습니다.


    mMapView.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOnWithHeading);




    다음은 테스트에 사용한 전체 소스 코드입니다. 


    activity_main.xml


    <?xml version="1.0" encoding="utf-8"?>

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="match_parent">

        <net.daum.mf.map.api.MapView
            android:id="@+id/map_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </RelativeLayout>




    MainActivity.java


    package com.tistory.webnautes.kakao_map_test;


    import android.Manifest;

    import android.app.AlertDialog;

    import android.content.DialogInterface;

    import android.content.Intent;

    import android.content.pm.PackageManager;

    import android.location.LocationManager;

    import android.os.Bundle;

    import androidx.annotation.NonNull;

    import androidx.core.app.ActivityCompat;

    import androidx.core.content.ContextCompat;

    import androidx.appcompat.app.AppCompatActivity;

    import android.util.Log;

    import android.widget.Toast;



    import net.daum.mf.map.api.MapPoint;
    import net.daum.mf.map.api.MapReverseGeoCoder;
    import net.daum.mf.map.api.MapView;

    public class MainActivity extends AppCompatActivity implements MapView.CurrentLocationEventListener, MapReverseGeoCoder.ReverseGeoCodingResultListener {

        private static final String LOG_TAG = "MainActivity";

        private MapView mMapView;


        private static final int GPS_ENABLE_REQUEST_CODE = 2001;
        private static final int PERMISSIONS_REQUEST_CODE = 100;
        String[] REQUIRED_PERMISSIONS  = {Manifest.permission.ACCESS_FINE_LOCATION};




        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            setContentView(R.layout.activity_main);

            mMapView = (MapView) findViewById(R.id.map_view);
            //mMapView.setDaumMapApiKey(MapApiConst.DAUM_MAPS_ANDROID_APP_API_KEY);
            mMapView.setCurrentLocationEventListener(this);

            if (!checkLocationServicesStatus()) {

                showDialogForLocationServiceSetting();
            }else {

                checkRunTimePermission();
            }

        }

        @Override
        protected void onDestroy() {
            super.onDestroy();
            mMapView.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOff);
            mMapView.setShowCurrentLocationMarker(false);
        }

        @Override
        public void onCurrentLocationUpdate(MapView mapView, MapPoint currentLocation, float accuracyInMeters) {
            MapPoint.GeoCoordinate mapPointGeo = currentLocation.getMapPointGeoCoord();
            Log.i(LOG_TAG, String.format("MapView onCurrentLocationUpdate (%f,%f) accuracy (%f)", mapPointGeo.latitude, mapPointGeo.longitude, accuracyInMeters));
        }


        @Override
        public void onCurrentLocationDeviceHeadingUpdate(MapView mapView, float v) {

        }

        @Override
        public void onCurrentLocationUpdateFailed(MapView mapView) {

        }

        @Override
        public void onCurrentLocationUpdateCancelled(MapView mapView) {

        }

        @Override
        public void onReverseGeoCoderFoundAddress(MapReverseGeoCoder mapReverseGeoCoder, String s) {
            mapReverseGeoCoder.toString();
            onFinishReverseGeoCoding(s);
        }

        @Override
        public void onReverseGeoCoderFailedToFindAddress(MapReverseGeoCoder mapReverseGeoCoder) {
            onFinishReverseGeoCoding("Fail");
        }

        private void onFinishReverseGeoCoding(String result) {
    //        Toast.makeText(LocationDemoActivity.this, "Reverse Geo-coding : " + result, Toast.LENGTH_SHORT).show();
        }




        /*
        * ActivityCompat.requestPermissions를 사용한 퍼미션 요청의 결과를 리턴받는 메소드입니다.
        */
        @Override
        public void onRequestPermissionsResult(int permsRequestCode,
                                              @NonNull String[] permissions,
                                              @NonNull int[] grandResults) {

            if ( permsRequestCode == PERMISSIONS_REQUEST_CODE && grandResults.length == REQUIRED_PERMISSIONS.length) {

                // 요청 코드가 PERMISSIONS_REQUEST_CODE 이고, 요청한 퍼미션 개수만큼 수신되었다면

                boolean check_result = true;


                // 모든 퍼미션을 허용했는지 체크합니다.

                for (int result : grandResults) {
                    if (result != PackageManager.PERMISSION_GRANTED) {
                        check_result = false;
                        break;
                    }
                }


                if ( check_result ) {
                    Log.d("@@@", "start");
                    //위치 값을 가져올 수 있음
                    mMapView.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOnWithHeading);
                }
                else {
                    // 거부한 퍼미션이 있다면 앱을 사용할 수 없는 이유를 설명해주고 앱을 종료합니다.2 가지 경우가 있습니다.

                    if (ActivityCompat.shouldShowRequestPermissionRationale(this, REQUIRED_PERMISSIONS[0])) {

                        Toast.makeText(MainActivity.this, "퍼미션이 거부되었습니다. 앱을 다시 실행하여 퍼미션을 허용해주세요.", Toast.LENGTH_LONG).show();
                        finish();


                    }else {

                        Toast.makeText(MainActivity.this, "퍼미션이 거부되었습니다. 설정(앱 정보)에서 퍼미션을 허용해야 합니다. ", Toast.LENGTH_LONG).show();

                    }
                }

            }
        }

        void checkRunTimePermission(){

            //런타임 퍼미션 처리
            // 1. 위치 퍼미션을 가지고 있는지 체크합니다.
            int hasFineLocationPermission = ContextCompat.checkSelfPermission(MainActivity.this,
                    Manifest.permission.ACCESS_FINE_LOCATION);


            if (hasFineLocationPermission == PackageManager.PERMISSION_GRANTED ) {

                // 2. 이미 퍼미션을 가지고 있다면
                // ( 안드로이드 6.0 이하 버전은 런타임 퍼미션이 필요없기 때문에 이미 허용된 걸로 인식합니다.)


                // 3.  위치 값을 가져올 수 있음
                mMapView.setCurrentLocationTrackingMode(MapView.CurrentLocationTrackingMode.TrackingModeOnWithHeading);


            } else//2. 퍼미션 요청을 허용한 적이 없다면 퍼미션 요청이 필요합니다. 2가지 경우(3-1, 4-1)가 있습니다.

                // 3-1. 사용자가 퍼미션 거부를 한 적이 있는 경우에는
                if (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, REQUIRED_PERMISSIONS[0])) {

                    // 3-2. 요청을 진행하기 전에 사용자가에게 퍼미션이 필요한 이유를 설명해줄 필요가 있습니다.
                    Toast.makeText(MainActivity.this, "이 앱을 실행하려면 위치 접근 권한이 필요합니다.", Toast.LENGTH_LONG).show();
                    // 3-3. 사용자게에 퍼미션 요청을 합니다. 요청 결과는 onRequestPermissionResult에서 수신됩니다.
                    ActivityCompat.requestPermissions(MainActivity.this, REQUIRED_PERMISSIONS,
                            PERMISSIONS_REQUEST_CODE);


                } else {
                    // 4-1. 사용자가 퍼미션 거부를 한 적이 없는 경우에는 퍼미션 요청을 바로 합니다.
                    // 요청 결과는 onRequestPermissionResult에서 수신됩니다.
                    ActivityCompat.requestPermissions(MainActivity.this, REQUIRED_PERMISSIONS,
                            PERMISSIONS_REQUEST_CODE);
                }

            }

        }



        //여기부터는 GPS 활성화를 위한 메소드들
        private void showDialogForLocationServiceSetting() {

            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("위치 서비스 비활성화");
            builder.setMessage("앱을 사용하기 위해서는 위치 서비스가 필요합니다.\n"
                    + "위치 설정을 수정하실래요?");
            builder.setCancelable(true);
            builder.setPositiveButton("설정", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    Intent callGPSSettingIntent
                            = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    startActivityForResult(callGPSSettingIntent, GPS_ENABLE_REQUEST_CODE);
                }
            });
            builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                }
            });
            builder.create().show();
        }


        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);

            switch (requestCode) {

                case GPS_ENABLE_REQUEST_CODE:

                    //사용자가 GPS 활성 시켰는지 검사
                    if (checkLocationServicesStatus()) {
                        if (checkLocationServicesStatus()) {

                            Log.d("@@@", "onActivityResult : GPS 활성화 되있음");
                            checkRunTimePermission();
                            return;
                        }
                    }

                    break;
            }
        }

        public boolean checkLocationServicesStatus() {
            LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

            return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)
                    || locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        }
    }





    참고


    http://apis.map.daum.net/android/guide/





    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구독하기


    댓글 85

    • 이전 댓글 더보기
    • Favicon of https://kkkapuq.tistory.com BlogIcon 주닝! 2019.09.26 11:05 신고


      안녕하세요 정보 감사합니다!

      키 해시 구할때 (9번 항목)
      Warning:
      The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore C:\Users\fhrek\.android\debug.keystore -destkeystore C:\Users\fhrek\.android\debug.keystore -deststoretype pkcs12".

      이라고 뜨고 키가 뜨는데 상관없는건가요?
      그리고 13번항목에서 key store 경로 설정해줄 때 제 keystore가 debug.keystore 이랑 debug.keystore.lock 파일밖에 없어요, jks파일이 아니라.. 어떻게 해야 하는지 알수있을까요..?

      이 부분 일단 패스하고 코드랑 빌드하고 실행해봤고, 코드 에러는 없는데 실행 에러가 나네요.

      Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
      is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
      Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:8:5-27:19 to override.

      해결법 알수있을까요 ㅠㅠ?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.09.26 11:58 신고


        해당 경고는 무시해도 됩니다. 확인해보니 동작하는데에는 문제가 없습니다.

        13번에서 이미 생성된 jks 파일을 가져오는게 아니라 새로 jks 파일을 생성하는 겁니다.

        마지막 에러는 프로젝트 생성시 androidx를 사용해야 해결됩니다. android.support를 사용하면 여러가지 문제가 발생해서 androidx를 사용하는 편이 나을듯합니다. 패키지 이름만 다른뿐 코드는 똑같이 사용가능합니다.

        포스트의 코드를 andoirdx를 사용하도록 패키지 이름을 바꾸어두었습니다.

      • Favicon of https://kkkapuq.tistory.com BlogIcon 주닝! 2019.09.27 14:59 신고


        상세한 답변 감사합니다.

        마지막 에러가 인터넷에서 찾아보니까
        refactor - migrate to AndroidX
        하라고 해서 했는데도 똑같이 에러가 나네요. 그냥 애초에 프로젝트를 생성할 때 AndroidX로 생성하는게 맞나요..?
        프로젝트 생성할때 use androidx 사용 체크하고 생성 후, 처음부터 다시 해봤는데

        import androidx.annotation.NonNull;

        import androidx.core.app.ActivityCompat;

        import androidx.core.content.ContextCompat;

        import androidx.appcompat.app.AppCompatActivity;

        이부분에서 임포트 에러가 나서 밑에도 안되는 것 같습니다...

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.09.27 15:35 신고


        use androidx 사용 체크하는게 맞습니다.

        어떤 에러가 나나요?

      • Favicon of https://kkkapuq.tistory.com BlogIcon 주닝! 2019.09.28 15:17 신고


        에러가 좀 많이나서.. 이곳저곳 답변주시기 전에 좀 손대봤는데..

        1. 임포트 부분 android.support.v7 ~~ 이쪽에서 에러가 나서 지우고 androidx로 수정해봤습니다.

        package com.example.ev_map;

        import android.Manifest;
        import android.app.AlertDialog;
        import android.content.DialogInterface;
        import android.content.Intent;
        import android.content.pm.PackageManager;
        import android.location.LocationManager;
        import android.os.Bundle;
        import androidx.annotation.NonNull;
        import androidx.appcompat.app.AppCompatActivity;
        //바로 위 코드가 에러났었음
        import androidx.core.app.ActivityCompat;
        import androidx.core.content.ContextCompat;
        import android.util.Log;
        import android.widget.Toast;



        import net.daum.mf.map.api.MapPoint;
        import net.daum.mf.map.api.MapReverseGeoCoder;
        import net.daum.mf.map.api.MapView;


        2. gradle : Module app 부분에서
        implementation 'com.android.support:appcompat-v7:28.0.0'

        이부분이 에러가 나서 검색해봤는데
        gradle.properties에
        android.useAndroidX=true
        android.enableJetifier=true
        이 내용을 추가하라고 해서 추가 후, 에러는 다 지우고 실행해봤는데..


        혹시 전체 보시면 아실까 해서 gradle : app 전체 올려봅니다 ㅠㅠ

        apply plugin: 'com.android.application'

        android {
        compileSdkVersion 28
        defaultConfig {
        applicationId "com.example.ev_map"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
        release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
        }
        }

        dependencies {
        implementation fileTree(include: ['*.jar'], dir: 'libs')
        implementation 'com.android.support:appcompat-v7:28.0.0'
        implementation 'com.android.support.constraint:constraint-layout:1.1.3'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
        implementation files('src/main/jniLibs/libDaumMapAndroid.jar')
        }


        The application could not be installed: INSTALL_FAILED_NO_MATCHING_ABIS
        Installation failed due to: 'null'

        라는 에러가 뜹니다.
        검색해보니까 뭐 인텔CPU가 아니라서 그런거다... 라는말이 있는데 ㅠ 라이젠이긴 하거든요.. 그게 문제는 아닌거같아서 여쭤봅니다 어렵네요..

        //추가

        재실행했는데 저 오류는 또 안뜨고
        run 창에서
        09/28 16:02:20: Launching 'app' on Nexus 5X API 28.

        이거 뜨고 그 다음부터 아무 반응도 없어요

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.09.28 19:48 신고


        에러가 나는 원인은 build.gradle에서 패키지 이름을 바꾸어 주지 않았기 때문입니다.

        dependencies 의 implementation 항목에 있는 패키지 이름을 아래 링크에서 검색하여 바꾸세요..
        https://developer.android.com/jetpack/androidx/migrate

    • Favicon of https://lifeoftay.tistory.com BlogIcon kgntay 2019.09.27 17:57 신고


      안녕하세요. 정말 좋은 정보 잘 배우고 있습니다.
      작성하신 내용대로 따라해서 avd 로 돌리면

      Install failed.
      Installation failed
      href 'rerun' Rerun

      위와 같이 설치도 안되고 Invalid device key response 라는 에러가 나옵니다..ㅠㅠ
      제 해시키의 문제인가요?ㅠ

    • cok 2019.09.29 04:44


      수정해주신 소스 덕분에 디바이스에 앱까지 올리게 됐습니다.
      하지만 자꾸 그 앱을 실행할수록 켜지려 하다가 꺼지기를 반복합니다.
      디바이스에선 앱이 자꾸 실행을 멈춘다고 알림을 해주고요ㅠㅠ 어떻게 해야할까요?

    • hhh 2019.10.03 19:07


      안녕하세요 ㅠㅠ 써주신 글을 참고하면서 제작을 하고 있습니다
      근데 mainactivity에 setDaumMapApiKey 가 계속 에러가 나고 있습니다
      어떻게 해야할까요 ㅠㅠㅠㅠ

    • Favicon of https://softwarecreators-hong-333.tistory.com BlogIcon MR.HONGS 2019.10.11 04:27 신고


      혹시 오픈소스에서 api키를 넣는 방법을 알고 싶은데 저렇게 하면 되나요? 저렇게 하면은 원래 있던 소스가 다날라가고 저 예제로 만들어지는데요... 오픈소스에서 api키를 넣거나 사용한는 방법을 알고 싶습니다...

    • backma2 2019.10.14 18:05


      이 포스트 써주셔서 너무 감사합니다 ㅠㅠㅠㅠ
      덕분에 이틀동안 삽질 한 거 해결했네요 ㅠㅠㅠㅠ

      추가로 저는 Didn't find class "net.daum.mf.map.n.api.NativePlatformThread" 이 에러가 떠서 구글링 한 결과
      proguard-rules.pro 에 -프로가드를 사용하고 있어서-
      # to keep the NativePlatformThread:
      -keep class net.daum.mf.map.n.** { *; }

      # these might not be optional:
      -keep class net.daum.mf.map.api.MapView { *; }
      -keep class net.daum.android.map.location.MapViewLocationManager { *; }
      -keep class net.daum.mf.map.api.MapPolyline { *; }
      -keep class net.daum.mf.map.api.MapPoint** { *; }

      # End: Debug ProGuard rules

      를 삽입해 주면 된다고 해서 최종적으로 해결 했습니다.
      혹시라도 저와 같은 증상으로 고생하시는 분 있을까 하여 글 올립니다

    • Favicon of https://softwarecreators-hong-333.tistory.com BlogIcon MR.HONGS 2019.10.16 12:15 신고


      로그캣에서 오류가 이렇게 뜨는데 어떻게 해결하나요?
      2019-10-16 12:04:40.720 15662-15662/com.example.capstone E/net.daum.mf.map.n.api.NativeMapLibraryLoader: Can`t load DaumMapEngineApi.so file
      2019-10-16 12:04:40.743 15662-15662/com.example.capstone E/AndroidRuntime: FATAL EXCEPTION: main
      Process: com.example.capstone, PID: 15662
      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.capstone/com.example.capstone.MainActivity}: android.view.InflateException: Binary XML file line #6: Binary XML file line #6: Error inflating class net.daum.mf.map.api.MapView
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
      at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
      at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
      at android.os.Handler.dispatchMessage(Handler.java:106)
      at android.os.Looper.loop(Looper.java:193)
      at android.app.ActivityThread.main(ActivityThread.java:6669)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
      Caused by: android.view.InflateException: Binary XML file line #6: Binary XML file line #6: Error inflating class net.daum.mf.map.api.MapView
      Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class net.daum.mf.map.api.MapView
      Caused by: java.lang.reflect.InvocationTargetException
      at java.lang.reflect.Constructor.newInstance0(Native Method)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
      at android.view.LayoutInflater.createView(LayoutInflater.java:647)
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
      at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
      at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
      at com.example.capstone.MainActivity.onCreate(MainActivity.java:53)
      at android.app.Activity.performCreate(Activity.java:7136)
      at android.app.Activity.performCreate(Activity.java:7127)
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
      at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
      at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
      at android.os.Handler.dispatchMessage(Handler.java:106)
      at android.os.Looper.loop(Looper.java:193)
      at android.app.ActivityThread.main(ActivityThread.java:6669)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
      Caused by: java.lang.UnsatisfiedLinkError
      at net.daum.mf.map.n.api.NativeMapLibraryLoader.loadLibrary(NativeMapLibraryLoader.java:39)
      at net.daum.mf.map.n.api.NativeThread.<clinit>(NativeThread.java:6)
      at android.opengl.alt.GLSurfaceView.setRenderer(GLSurfaceView.java:302)
      at net.daum.android.map.MapView.init(MapView.java:43)
      at net.daum.android.map.MapView.<init>(MapView.java:55)
      at net.daum.mf.map.api.MapView.<init>(MapView.java:460)
      at java.lang.reflect.Constructor.newInstance0(Native Method) 
      at java.lang.reflect.Constructor.newInstance(Constructor.java:343) 
      at android.view.LayoutInflater.createView(LayoutInflater.java:647) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) 
      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
      at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469) 
      at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
      at com.example.capstone.MainActivity.onCreate(MainActivity.java:53) 
      at android.app.Activity.performCreate(Activity.java:7136) 
      at android.app.Activity.performCreate(Activity.java:7127) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 
      at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
      at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
      at android.os.Handler.dispatchMessage(Handler.java:106) 
      at android.os.Looper.loop(Looper.java:193) 
      at android.app.ActivityThread.main(ActivityThread.java:6669) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 

    • lee 2019.11.10 18:20


      위와 방식으로 다 한후 MainActivity.java 코드를 그대로 복붙 했는데 MapView등 많은 오류가 뜨는데 어떤 문제인지 모르겠습니다ㅠ

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.10 20:23 신고


        프로젝트 새로 생성시 androidx를 사용 여부를 확인해보세요.

        포스트에서는 androidx를 사용합니다.

      • lee 2019.11.11 00:22


        androioidx로 이전할려고 하면 no usages found in the project라고 뜨는데 어떻게해야 할까요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.12 09:01 신고


        새로 프로젝트 생성시 androidx를 사용하도록 해서 기존 코드를 복사해서 사용하는 게 나을듯합니다.

    • wcu 2019.11.13 01:35


      샘플에서 가져온 지도를 실행했더니 데모에서 DaumMapApiDemos has stopped가 뜨는데 해결방법이 뭘까요 ㅠㅠ

      로그캣에는

      2019-11-13 01:51:37.915 12114-12137/net.daum.android.map.openapi.sampleapp E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008cdf
      2019-11-13 01:51:37.915 12114-12137/net.daum.android.map.openapi.sampleapp E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008cdf
      2019-11-13 01:51:37.915 12114-12137/net.daum.android.map.openapi.sampleapp E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824
      2019-11-13 01:51:37.915 12114-12137/net.daum.android.map.openapi.sampleapp E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824

      이런식으로 나오네요

      데모목록 버튼에서 클릭 시
      2019-11-13 02:09:27.408 13830-13830/net.daum.android.map.openapi.sampleapp E/AndroidRuntime: FATAL EXCEPTION: main
      Process: net.daum.android.map.openapi.sampleapp, PID: 13830
      java.lang.UnsatisfiedLinkError
      at net.daum.mf.map.n.api.NativeMapLibraryLoader.loadLibrary(NativeMapLibraryLoader.java:39)
      at net.daum.mf.map.n.api.NativeThread.<clinit>(NativeThread.java:6)
      at android.opengl.alt.GLSurfaceView.setRenderer(GLSurfaceView.java:302)
      at net.daum.android.map.MapView.init(MapView.java:43)
      at net.daum.android.map.MapView.<init>(MapView.java:50)
      at net.daum.mf.map.api.MapView.<init>(MapView.java:445)
      at net.daum.mf.map.api.MapLayout.<init>(MapLayout.java:28)
      at net.daum.android.map.openapi.sampleapp.demos.MapViewDemoActivity.onCreate(MapViewDemoActivity.java:34)
      at android.app.Activity.performCreate(Activity.java:6975)
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
      at android.app.ActivityThread.-wrap11(Unknown Source:0)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
      at android.os.Handler.dispatchMessage(Handler.java:105)
      at android.os.Looper.loop(Looper.java:164)
      at android.app.ActivityThread.main(ActivityThread.java:6541)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
      이런 오류가 나오면서
      DaumMapApiDemos has stopped 창이 뜨네요

      해결방법으로 Instant Run 메뉴로 가보라는데 저 메뉴가 제 버전에는 없고 지원을 안하는데 어떻하나요..

    • react 2019.11.13 18:35


      핸드폰 연결 후 실행은 되는데 카카오 로고만 좌측하단에 나오고 맵이 안나오는 이유는 왜그럴까요 ㅠㅠ

      디버그키, 릴리스키 모두 새로 발급받아서 했는데도 안되네요

    • android 2019.11.13 18:56


      감사합니다! 현재 위치는 잘 뜨는데 내 위치를 핀으로 찍어내는 건 어떻게 하면 좋을지 여쭤봅니다~~

    • foiscs 2019.11.15 02:57


      2019-11-15 02:32:42.104 5526-5536/? E/com.du.wltkvm: Failed to send DDMS packet REAQ to debugger (-1 of 20): Broken pipe
      2019-11-15 02:32:42.220 5526-5526/? E/AndroidRuntime: FATAL EXCEPTION: main
      Process: com.du.wltkvm, PID: 5526
      java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.du.wltkvm/com.du.wltkvm.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2843)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
      at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
      at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
      at android.os.Handler.dispatchMessage(Handler.java:106)
      at android.os.Looper.loop(Looper.java:193)
      at android.app.ActivityThread.main(ActivityThread.java:6669)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
      at android.content.ContextWrapper.getResources(ContextWrapper.java:91)
      at android.view.ContextThemeWrapper.getResourcesInternal(ContextThemeWrapper.java:127)
      at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:121)
      at android.view.View.<init>(View.java:4796)
      at android.view.View.<init>(View.java:4948)
      at android.view.SurfaceView.<init>(SurfaceView.java:197)
      at android.view.SurfaceView.<init>(SurfaceView.java:193)
      at android.view.SurfaceView.<init>(SurfaceView.java:189)
      at android.view.SurfaceView.<init>(SurfaceView.java:185)
      at android.opengl.alt.GLSurfaceView.<init>(GLSurfaceView.java:196)
      at net.daum.android.map.MapView.<init>(MapView.java:49)
      at net.daum.mf.map.api.MapView.<init>(MapView.java:445)
      at com.du.wltkvm.MainActivity.<init>(MainActivity.java:19)
      at java.lang.Class.newInstance(Native Method)
      at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
      at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43)
      at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2831)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048) 
      at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 
      at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808) 
      at android.os.Handler.dispatchMessage(Handler.java:106) 
      at android.os.Looper.loop(Looper.java:193) 
      at android.app.ActivityThread.main(ActivityThread.java:6669) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
      똑같이 했는대 이런오류가 뜨내요 ;;

    • 구원해주세요 2019.11.20 13:02


      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kakao.kakao_map_text/com.kakao.kakao_map_text.MainActivity}: android.view.InflateException: Binary XML file line #6 in com.kakao.kakao_map_text:layout/activity_main: Binary XML file line #6 in com.kakao.kakao_map_text:layout/activity_main: Error inflating class net.daum.mf.map.api.MapView
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3260)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3396)
      at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
      at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2009)
      at android.os.Handler.dispatchMessage(Handler.java:107)
      at android.os.Looper.loop(Looper.java:214)
      at android.app.ActivityThread.main(ActivityThread.java:7319)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)
      Caused by: android.view.InflateException: Binary XML file line #6 in com.kakao.kakao_map_text:layout/activity_main: Binary XML file line #6 in com.kakao.kakao_map_text:layout/activity_main: Error inflating class net.daum.mf.map.api.MapView
      Caused by: android.view.InflateException: Binary XML file line #6 in com.kakao.kakao_map_text:layout/activity_main: Error inflating class net.daum.mf.map.api.MapView
      Caused by: java.lang.reflect.InvocationTargetException
      at java.lang.reflect.Constructor.newInstance0(Native Method)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
      at android.view.LayoutInflater.createView(LayoutInflater.java:854)
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006)
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
      at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
      at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
      at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
      at com.kakao.kakao_map_text.MainActivity.onCreate(MainActivity.java:53)
      at android.app.Activity.performCreate(Activity.java:7783)
      at android.app.Activity.performCreate(Activity.java:7772)
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3235)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3396)
      at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
      at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2009)
      at android.os.Handler.dispatchMessage(Handler.java:107)
      at android.os.Looper.loop(Looper.java:214)
      at android.app.ActivityThread.main(ActivityThread.java:7319)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)
      Caused by: java.lang.UnsatisfiedLinkError
      at net.daum.mf.map.n.api.NativeMapLibraryLoader.loadLibrary(NativeMapLibraryLoader.java:39)
      at net.daum.mf.map.n.api.NativeThread.<clinit>(NativeThread.java:6)
      2019-11-20 12:52:02.437 16738-16738/com.kakao.kakao_map_text E/AndroidRuntime: at android.opengl.alt.GLSurfaceView.setRenderer(GLSurfaceView.java:302)
      at net.daum.android.map.MapView.init(MapView.java:43)
      at net.daum.android.map.MapView.<init>(MapView.java:55)
      at net.daum.mf.map.api.MapView.<init>(MapView.java:460)
      ... 28 more

      인플레이트오류가 뜨는거같은데 원인이 뭘까요..

    • 쿄쿄쿠큐 2019.11.22 16:55


      감사합니다. 잘 보았습니다. 너무 궁금한 것이 있습니다. 위 코드대로 짜보니... 지도화면을 스크롤 하면.. 계속 자동으로 내 현재위치로 강제로 이동되던데... 처음 액티비티를 실행했을 때 내 현재 위치로 이동하고.. 그 이후에 스크롤 하면 강제로 내 위치로 안 오게 하려면 어떻게 해야 되나요? ㅠㅠㅠ 그리고... 버튼을 하나 만들어서... 그 버튼을 누르면 나의 현재 위치로 이동하게 하려면 어떻게 하나요? 마지막으로 지도를 스크롤 할 때마다 마커가 항상 중심에 있게 하고.. 실시간 주소를 항상 TextView에 표시하게 하려면 어떻게 해야 하나요? 질문이 길어서 죄송합니다. 너무 급해서요 ㅠㅠㅠ

    • 감사합니다 2019.12.03 16:54


      안녕하세요. 글 정말 도움 많이 되었습니다. 감사합니다.
      Logcat 에러가 발생하는데 어떤 문제 인지 모르겠네요.. 제 생각으로는 레이아웃 관련 에러같은데..
      2019-12-03 16:50:22.346 15739-15739/com.example.kakaomaptest E/AndroidRuntime: FATAL EXCEPTION: main
      Process: com.example.kakaomaptest, PID: 15739
      java.lang.UnsatisfiedLinkError
      at net.daum.mf.map.n.api.NativeMapLibraryLoader.loadLibrary(NativeMapLibraryLoader.java:39)
      at net.daum.mf.map.n.api.NativeThread.<clinit>(NativeThread.java:6)
      at android.opengl.alt.GLSurfaceView.setRenderer(GLSurfaceView.java:302)
      at net.daum.android.map.MapView.init(MapView.java:43)
      at net.daum.android.map.MapView.<init>(MapView.java:50)
      at net.daum.mf.map.api.MapView.<init>(MapView.java:445)
      at com.example.kakaomaptest.MainActivity.onCreate(MainActivity.kt:14)
      at android.app.Activity.performCreate(Activity.java:7802)
      at android.app.Activity.performCreate(Activity.java:7791)
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
      at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
      at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
      at android.os.Handler.dispatchMessage(Handler.java:107)
      at android.os.Looper.loop(Looper.java:214)
      at android.app.ActivityThread.main(ActivityThread.java:7356)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

    • 감사합니다ㅜ 2019.12.09 16:45


      게시글 감사합니다ㅠ 많은 도움이 되었습니다!
      혹시 코드 변수 중 현재 위치의 좌표 값을 알 수 있는 변수가 무엇인가요?ㅠ
      mapPointGeo.latitude로 시도해보았으나 되지않네요ㅜ

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.12.09 22:28 신고


        다음 함수에서 현재 위치값 접근이 가능합니다. 다른 함수에서 사용할거면 전역변수를 선언해서 사용하면 될듯합니다.

        @Override
        public void onCurrentLocationUpdate(MapView mapView, MapPoint currentLocation, float accuracyInMeters) {
        MapPoint.GeoCoordinate mapPointGeo = currentLocation.getMapPointGeoCoord();
        Log.i(LOG_TAG, String.format("MapView onCurrentLocationUpdate (%f,%f) accuracy (%f)", mapPointGeo.latitude, mapPointGeo.longitude, accuracyInMeters));
        }

    • Favicon of https://byeongmoo.tistory.com BlogIcon byeongmoo 2020.01.04 07:33 신고


      제가 휴대폰으로 실행을 하면 지도가 안보입니다 로그켓 보니
      company.co.kakao_map_test W/libEGL: EGLNativeWindowType 0x78bd486010 disconnect failed 이게 많던데 어떤건가요??이거랑 관련이 있나요??

    • lalalalal 2020.01.18 02:19


      안녕하세요 글대로 코드를 짜고 에뮬레이터를 실행하였으나 에뮬레이터 기본화면만 뜰뿐 지도가 나타나지 않습니다. 이경우에는 어떻게 해야할까요? 답변 부탁드립니다.

    • 2020.01.30 00:13


      바라보고 있는 방향을 빼고 싶은데 어떤 코드를 빼면 되나요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2020.01.30 08:27 신고


        TrackingModeOnWithHeading를 TrackingModeOff로 수정하면 되지않을까 싶습니다. 자세한 내용은 아래 링크를 참고하세요
        http://apis.map.kakao.com/android/documentation/

    • 루시엘 2020.02.05 10:08


      안녕하세요 다름이 아니라 쓰니께서 올린 코드로
      카카오맵 트래킹을 하려고 전부 다 복붙했는데 여러가지 오류가 나와서
      문의차 댓글을 쓰게되었네요
      혹시 따로 연락이 가능할까요?

Designed by Tistory.