Android

안드로이드 스튜디오 GPS 기능으로 지도에 마커 추가하기

567Rabbit 2024. 6. 18. 15:15

 

좌표 표시하는 라이브러리로 코드 작성하기

 

환경변수 설정하기

 

 

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

 

 

 

 

MainActivity.java

 

package com.~.gps;

import android.Manifest;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;

import java.util.List;


public class MainActivity extends AppCompatActivity {

    LocationListener locationListener;
    LocationManager locationManager;

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

        // 1. 위치를 가져오기 위해서는 시스템 서비스로부터 로케이션 매니저를 받아와야 한다.
        locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        // 2. 위치가 바뀔 때마다 우리가 처리해야 할 함수 작성
        locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(@NonNull Location location) {
                Log.i("GPS MAIN", "위도 : " + location.getLatitude() + " , 경도 : " + location.getLongitude());
            }
        };

        // 3. 로케이션 매니저에, 우리가 작성한 함수를 적용한다.
        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(MainActivity.this,
                    new String[]{Manifest.permission.ACCESS_FINE_LOCATION,
                            Manifest.permission.ACCESS_COARSE_LOCATION},
                    100);
            return;
        }

        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                3000,
                -1,
                locationListener);  //minTimeMs초마다 한번씩 또는 minDistanceM미터가 변경될 때마다 한번씩 실행 시킨다.
    }


        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);

            if (requestCode == 100) { // 요청 코드가 100일 때만 처리
                // grantResults 배열의 길이를 확인하여 IndexOutOfBoundsException 방지
                if (grantResults.length > 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
                    // 위치 권한이 승인되었을 때
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
                            && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {

                        if (locationManager != null) { // locationManager가 null이 아닌지 확인
                            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                                    3000,
                                    -1,
                                    locationListener); // minTimeMs초마다 한 번씩 또는 minDistanceM미터가 변경될 때마다 한 번씩 실행
                        }
                    }
                }
            }
        }

}

 

 

 

실행시키면, 로그캣에서 현재 기기에 등록된 나의 위치의 위도 경도를 알려준다.

 

 

 

 

 

실행시킨 상태에서, 아래와 같은 버튼을 누르면 새 창으로 GPS가 뜬다.

 

 

 

 

 

지정하고 싶은 위치를 클릭하고 SavePoint를 한 뒤, import GPX/KML 눌러준다

그리고 Set Location 하면 된다.