본문 바로가기
Android Studio

[Android Studio] 현재 내 위치(위도, 경도)값을 가지고 오는 방법

by dong_su 2024. 1. 10.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

AndroidManifest.xml에서 <manifest>와 <application> 태그 사이에 위 코드 작성한다.


Activity.java 코드

public class MainActivity extends AppCompatActivity {

    // 위치 관련 클래스
    LocationManager locationManager;
    // 위치 관련 이벤트리스너
    LocationListener locationListener;

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

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

        // 위치가 변할때마다 호출되는 함수 작성
        locationListener = new LocationListener() {
            @Override
            public void onLocationChanged(@NonNull Location location) {
                // 위도, 경도값을 뽑아서 우리에 맞는 코드를 작성한다.

                // 위도
                double lat = location.getLatitude();
                // 경도
                double lng = location.getLongitude();

                Log.i("AAAAAAA", "위도 : " + lat);
                Log.i("AAAAAAA", "위도 : " + lng);
                Log.i("AAAAAAA", "        ");
            }
        };

        // 권한 허용하는 코드
        if (ActivityCompat.checkSelfPermission(MainActivity.this,
                Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
                ActivityCompat.checkSelfPermission(MainActivity.this,
                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;
        }

        // 밀리세컨즈라 3초 = 3000, 사용안할거면 -1
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000,
                                                -1, locationListener);
    }

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

        if (requestCode == 100){
            // 허용하지 않았으면, 다시 허용하라는 alert 띄운다.
            if (ActivityCompat.checkSelfPermission(MainActivity.this,
                    Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ||
                    ActivityCompat.checkSelfPermission(MainActivity.this,
                            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);
                finish();
                return;
            }

            // 허용했으면, GPS 정보 가져오는 코드 넣는다.
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000,
                    -1, locationListener);
        }
    }
}

onRequestPermissionsResult() 함수는 onCreate() 함수 밖에 써야 한다.

 

위 코드 작성 후 실행하면 logcat에 현재 위치(위도, 경도)값이 나온다.