본문 바로가기
Back End/Android(

Android/ 위치를 잡아주는 LocationManager 사용법

by healingmau 2022. 7. 29.

 

위치를 잡아주는 LocationManager 사용법

 

안드로이드에서 위치정보를 얻는

LocationManger을 사용하기 위해서는

먼저 AndroidManifest.xml 퍼미션 설정을

해줘야 하는데요.

 

AndroidManifest.xml

아래 2개의 코드를 추가해 줍니다.

 

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

 

RERMISSION_DENIED : 퍼미션이 부여되지 않은 상태

PERMISSION_GRANTED : 퍼미션이 부여되어 있는 상태

 

 

AndroidManifest.xml

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

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

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Location"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

MainActivity.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) 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;
        }
        // locationManager.requestLocationUpdates 파라미터 참고
        // 첫번째는 gps를 사용하겠다
        // 두번째는 위치정보를 가져올건데 내가 지정한 만큼의 시간 마다 정보를 받아온다. 초를 사용하지 않으면 -1을 기재
        // 세번째는 내가 지정한 만큼의 움직이는 거리마다 gps정보를 받아오는데 단위는 미터단위. 미터를사용하지 않겠다면 -1을 기재
        // 네번째는 locationListener 변수에서 좌표정보를 가져와라
        // 위의 퍼미션은 아래 코드 작성 후 알트엔터
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                3000,
                3,
                locationListener);

    }

    // 퍼미션에대한 응답 함수
    @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;
            }

            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                    3000,
                    3,
                    locationListener);
        }
    }
}

 

Logcat 확인

힐링아무의 코딩일기!!

댓글