[퍼미션]
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 최소 GPS 정보 업데이트 거리 10미터
final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 최소 GPS 정보 업데이트 시간 밀리세컨이므로 1분
final LocationManager locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
final LocationListener gpsLocationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// 위치 리스너는 위치정보를 전달할 때 호출되므로 onLocationChanged()메소드 안에 위지청보를 처리를 작업을 구현 해야합니다.
String provider = location.getProvider(); // 위치정보
double longitude = location.getLongitude(); // 위도
double latitude = location.getLatitude(); // 경도
double altitude = location.getAltitude(); // 고도
DLog.d(new Exception(), "위치정보 : " + provider + "\n" + "위도 : " + longitude + "\n" + "경도 : " + latitude + "\n" + "고도 : " + altitude);
} public void onStatusChanged(String provider, int status, Bundle extras) {
} public void onProviderEnabled(String provider) {
} public void onProviderDisabled(String provider) {
}
};
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, gpsLocationListener);
/*
Provider의 경우 3가지가 있음.
LocationManager.NETWORK_PROVIDER
LocationManager.GPS_PROVIDER
LocationManager.PASSIVE_PROVIDER
주의해야되는 부분은 GPS_PROVIDER의 경우 실내에서 사용하면 리스너가 동작하지 않을 수 있어 NETWORK_PROVIDER를 사용하는걸
권장함.
LocationListener를 사용하지 않고 아래처럼 바로 최근 위치 정보를 가져올 수도 있음.
GPS_PROVIDER를 사용했을때 location이 null 인경우가 있어 기본적으로 NETWORK_PROVIDER를 사용함.
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
String provider = location.getProvider();
double longitude = location.getLongitude();
double latitude = location.getLatitude();
double altitude = location.getAltit
DLog.d(new Exception(), "위치정보 : " + provider + "\n" +
"위도 : " + longitude + "\n" +
"경도 : " + latitude + "\n" +
"고도 : " + altitude);
}
*/
개통이 안된 기기에서는 NETWORK_PROVIDER / GPS_PROVIDER 등 전부 동작 안되는 경우가 있음.
금융권 프로젝트시 이거 때문에 고생했음.
위도/경도로 상세주소 가져오기
private String getAddress(Context mContext, double lat, double lng)
{
String nowAddr ="현재 위치를 확인 할 수 없습니다.";
Geocoder geocoder = new Geocoder(mContext, Locale.KOREA);
List<Address> address;
try
{
if (geocoder != null)
{
address = geocoder.getFromLocation(lat, lng, 1);
if (address != null && address.size() > 0)
{
// 전체 주소 한번에 가져올 수 있음
nowAddr = address.get(0).getAddressLine(0).toString();
// 조합해서 적용
String country = address.get(0).getCountryName(); //대한민국
String adminArea = "";
String locality = "";
if (address.get(0).getLocality() == null) {
// 광역시 일 경우
adminArea = address.get(0).getAdminArea(); // 광주광역시
} else {
adminArea = address.get(0).getAdminArea(); // 충청북도
locality = address.get(0).getLocality(); // 청주시
}
String subLocality = address.get(0).getSubLocality(); // 북구
String thoroughfare = address.get(0).getThoroughfare(); // 매곡동
String subThoroughfare = address.get(0).getSubThoroughfare(); // 89번지
DLog.i(new Exception(), country + " " + adminArea + " " + locality + " " + subLocality + " " + thoroughfare + " " + subThoroughfare);
DLog.i(new Exception(), "");
}
}
}
catch (IOException e)
{
Toast.makeText(mContext, "주소를 가져 올 수 없습니다.", Toast.LENGTH_LONG).show();
e.printStackTrace();
}
return nowAddr;
}
'Android(Java)' 카테고리의 다른 글
[Android] 금융권 안드로이드 프로젝트 내부망 세팅방법 (1) | 2024.03.29 |
---|---|
[Android] 구버전 안드로이드 스튜디오 다운로드 링크 (0) | 2024.03.29 |
[Java] ImageView FadeIn 효과 애니메이션 (0) | 2024.03.28 |
[Java] 인앱 업데이트 (강제업데이트) (0) | 2024.03.28 |
[Java] TextView 일부 글자만 색/크기/스타일 변경하기 (0) | 2024.03.28 |