사용하기에 앞서 권한이 필요하다
매니페스트에 들어가자
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
정확한 위치 사용과
대략적인 위치 사용의 권한을 받자
우선은 정확한 위치 사용이 베이스가 되며
정확한 위치 사용이 불가능할때 대략적인 위치 사용이 사용된다
그리고 사용하기 위해
멤버변수로 등록을 우선 해준다
LocationManager locationManager;
LocationListener locationListener;
그리고 사용하는 공간으로 가서
// 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.requestPermissions();
return;
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
3000,
3,
locationListener);
1. 위치를 가져오기위해 "시스템서비스"로부터 "로케이션 매니져"를 받아오고
2. 두번째로 위치가 바뀔때마다 처리할 함수를 작성해주고
이번에는 로그로만 찍어보도록하자
그리고 getLatitude로 위도와, getLongitude로 경도를 가져오도록 하자
3. 로케이션 매니저에 우리가 작성한 함수를 적용시켜준다
3번의 파라미터 의미는
첫번째는 GPS를 사용한다는 의미
두번째는 3000밀리세컨드= 3초마다
세번째는 3m마다
네번째는 이때 2번을 사용해라~ 하는 의미
이때 3번을 진행하려고 하면 에러가 뜨고 권한을 받아야 한다고 하면서 바뀌게 된다
// 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,
3,
locationListener);
권한을 받는 요청을 적는 함수를 만들어준뒤
권한을 거절하면 리퀘스트 코드를 100번으로 나오게 만들어준 뒤에
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if( requestCode == 100){
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);
}
위와 같은 함수를 하나 만들어
리퀘스트코드가 100번 = 즉, 위에서 권한여부를 설정하는 구간에서 권한을 주지않는다면
다시 한번 권한을 설정하는 알림이 뜨게 만들고
계속 무한루프에 빠지게 만든다
권한이 없다면 진행할 수 없다
해서 실행한다면
이렇게 위도와 경도를 알려주게 되는데
이것을 응용하여
지도에 몇초마다, 혹은 몇미터마다 표시를 할 수 있겠다
'Java > AndroidStudio' 카테고리의 다른 글
Android - 구글맵 마커 표시 (0) | 2024.06.19 |
---|---|
Android - 이메일 형식 체크 (0) | 2024.06.19 |
Android - 탭바 (1) | 2024.06.18 |
Android - 레트로핏 멀티파트 폼 데이터 보내는 법 (0) | 2024.06.17 |
Android - 카메라, 앨범 앱 사용, 권한 (0) | 2024.06.14 |