본문 바로가기

안드로이드 스튜디오

[ 안드로이드 ] 위치 정보 얻는 LocationManager 사용법

AndroidManifest.xml 퍼미션 설정

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

 

LocationManager를 이용하여 현재 위치정보 가져오기

locationManager = (LocationManager) this.getSystemService(LOCATION_SERVICE);
locationListener = new LocationListener() {
    @Override
    public void onLocationChanged(@NonNull Location location) {
        Log.i("myLocation", "위도 : " + location.getLatitude());
        Log.i("myLocation", "경도 : " + location.getLongitude());
    }
};

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(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초 지날 때마다, LocationManager 실행
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, -1, locationListener);

 

 

• 현재 사용하려고 하는 권한이 설정되어 있는지 체크 => checkSelfPermission 이용

- 리턴값이 PERMISSION_DENIED 인 경우 사용자가 권한을 설정할 수 있도록 메시지를 표시=> requestPermissions

- 리턴값이 PERMISSION_GRANTED 인 경우, LocationManager 실행

 

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

    if (requestCode == 100) {
        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초 지날 때마다, LocationManager 실행
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, -1, locationListener);

    }
}

checkSelfPermission : 퍼미션의 현재 상태를 확인하는 메소드

  • requestPermissions : 권한이 체크되어 있지 않은 경우 (PERMISSION_DENIED) 권한을 요청하는 메시지 표시
  • onRequestPermissionsResult : requestPermissions 의  결과로 호출되는 메소드
PERMISSION_DENIED  퍼미션이 부여되지 않은 상태
PERMISSION_GRANTED  퍼미션이 부여되어 있는 상태