일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 행퀴
- 캐슬
- 행운퀴즈정답
- 캐웤
- 초성퀴즈
- Android
- 안드로이드
- 톹
- spring게시판
- 비트코인
- 캐시워크정답
- 행운퀴즈
- 자바
- 캐시워크
- 캐시슬라이드
- 추천인
- 이벤트
- java
- 리브메이트
- ㄹㅂㅁㅇㅌ
- TOSS
- 정답
- 오퀴즈정답
- 오퀴즈
- 오늘의퀴즈
- 초성퀴즈정답
- 퀴즈
- 토스정답
- 돈버는퀴즈
- 토스
- Today
- 252,060
- Total
- 18,363,256
Gomdori
[Android] GPS 현재 위치 가져오기(Location,Latitude,Longitude) 본문
안녕하세요.
이번 포스팅은 Android Get_location에 대한 포스팅입니다.
위도와 경도 (Latitude,Longitude)를 얻어 올 수 있습니다.
Manifests 부분에 권한설정을 해주셔야합니다.
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
GpsTracker.java
package gujc.directtalk9;
import android.Manifest;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import androidx.core.content.ContextCompat;
public class GpsTracker extends Service implements LocationListener {
private final Context mContext;
Location location;
double latitude;
double longitude;
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10;
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1;
protected LocationManager locationManager;
public GpsTracker(Context context) {
this.mContext = context;
getLocation();
}
public Location getLocation() {
try {
locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
boolean isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
} else {
int hasFineLocationPermission = ContextCompat.checkSelfPermission(mContext,
Manifest.permission.ACCESS_FINE_LOCATION);
int hasCoarseLocationPermission = ContextCompat.checkSelfPermission(mContext,
Manifest.permission.ACCESS_COARSE_LOCATION);
if (hasFineLocationPermission == PackageManager.PERMISSION_GRANTED &&
hasCoarseLocationPermission == PackageManager.PERMISSION_GRANTED) {
} else
return null;
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null)
{
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null)
{
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
if (isGPSEnabled)
{
if (location == null)
{
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
if (locationManager != null)
{
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null)
{
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
}
catch (Exception e)
{
Log.d("@@@", ""+e.toString());
}
return location;
}
public double getLatitude()
{
if(location != null)
{
latitude = location.getLatitude();
}
return latitude;
}
public double getLongitude()
{
if(location != null)
{
longitude = location.getLongitude();
}
return longitude;
}
@Override
public void onLocationChanged(Location location)
{
}
@Override
public void onProviderDisabled(String provider)
{
}
@Override
public void onProviderEnabled(String provider)
{
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
@Override
public IBinder onBind(Intent arg0)
{
return null;
}
public void stopUsingGPS()
{
if(locationManager != null)
{
locationManager.removeUpdates(GpsTracker.this);
}
}
}
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gpsTracker = new GpsTracker(MainActivity.this);
double latitude = gpsTracker.getLatitude(); // 위도
double longitude = gpsTracker.getLongitude(); //경도
//필요시 String address = getCurrentAddress(latitude, longitude); 대한민국 서울시 종로구 ~~
}
MainActivity Methods
public String getCurrentAddress( double latitude, double longitude) {
//지오코더... GPS를 주소로 변환
Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses;
try {
addresses = geocoder.getFromLocation(
latitude,
longitude,
100);
} catch (IOException ioException) {
//네트워크 문제
Toast.makeText(this, "지오코더 서비스 사용불가", Toast.LENGTH_LONG).show();
showDialogForLocationServiceSetting();
return "지오코더 서비스 사용불가";
} catch (IllegalArgumentException illegalArgumentException) {
Toast.makeText(this, "잘못된 GPS 좌표", Toast.LENGTH_LONG).show();
showDialogForLocationServiceSetting();
return "잘못된 GPS 좌표";
}
if (addresses == null || addresses.size() == 0) {
Toast.makeText(this, "주소 미발견", Toast.LENGTH_LONG).show();
showDialogForLocationServiceSetting();
return "주소 미발견";
}
Address address = addresses.get(0);
return address.getAddressLine(0).toString()+"\n";
}
//여기부터는 GPS 활성화를 위한 메소드들
private void showDialogForLocationServiceSetting() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("위치 서비스 비활성화");
builder.setMessage("앱을 사용하기 위해서는 위치 서비스가 필요합니다.\n"
+ "위치 설정을 수정하실래요?");
builder.setCancelable(true);
builder.setPositiveButton("설정", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
Intent callGPSSettingIntent
= new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(callGPSSettingIntent, GPS_ENABLE_REQUEST_CODE);
}
});
builder.setNegativeButton("취소", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
builder.create().show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case GPS_ENABLE_REQUEST_CODE:
//사용자가 GPS 활성 시켰는지 검사
if (checkLocationServicesStatus()) {
if (checkLocationServicesStatus()) {
Log.d("@@@", "onActivityResult : GPS 활성화 되있음");
checkRunTimePermission();
return;
}
}
break;
}
}
이렇게 하시면 Android GPS Get_Location이 가능합니다!
궁금한 게 있으시면 댓글달아주시면 감사하겠습니다!
참고
'코딩(Coding)' 카테고리의 다른 글
[Android] 안드로이드 스튜디오 특정 지역에 대한 위도/경도 가져오기(Google Geocoder) (0) | 2020.06.24 |
---|---|
[Android] 안드로이드 스튜디오 BottomNavigationView 사용하기 (0) | 2020.06.24 |
[Android/안드로이드] Background(백그라운드) Service Thread 설정 (0) | 2020.03.12 |
[Node js] Error page 에러 페이지 설정해주는 방법 (0) | 2020.03.12 |
[GitLab/GitHub] 프로젝트 올리기 초기 설정 방법(Project Push) (0) | 2020.03.11 |