Back End/Android(

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

healingmau 2022. 7. 29. 12:01

 

위치를 잡아주는 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 확인

힐링아무의 코딩일기!!