[안드로이드] 현재 GPS정보 알아오기 / 내 현재위치 찾기
오늘은 안드로이드의 GPS정보를 통해 내 위치를 찾는 방법을 포스팅해 보겠습니다.
안드로이드에서는 LocationManager라는 시스템서비스를 제공합니다.
이를 이용하여 우리의 GPS Location정보를 가져오도록 하겠습니다.
위치정보 또한 위험권한에 속하므로 안드로이드6.0(마시멜로우) 이상버전에서는
꼭 권한체크를 꼭 해주셔야 합니다.
0. Manifest에 권한등록하기
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
1. 위치 관리자 객체 참조하기
- getSystemService()메소드를 사용하여 객체를 참조합니다.
final LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
2. 가장최근 위치정보 가져오기
- 가장최근의 위치정보를 가지고옵니다.
Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
3. 위치 리스너 구현
- 위치 리스너는 위치정보를 전달할 때 호출되므로 onLocationChanged()메소드 안에 위지청보를 처리를 작업을 해야합니다.
final LocationListener gpsLocationListener = new LocationListener() { public void onLocationChanged(Location location) { String provider = location.getProvider(); double longitude = location.getLongitude(); double latitude = location.getLatitude(); double altitude = location.getAltitude(); txtResult.setText("위치정보 : " + 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) { } };
4. 위치정보 업데이트
- 위치정보를 원하는 시간, 거리마다 갱신해줍니다.
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, gpsLocationListener); lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1, gpsLocationListener);
5. 전체소스
[MainActivity.java]
public class MainActivity extends AppCompatActivity { private Button button1; private TextView txtResult; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button1 = (Button)findViewById(R.id.button1); txtResult = (TextView)findViewById(R.id.txtResult); final LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if ( Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission( getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION ) != PackageManager.PERMISSION_GRANTED ) { ActivityCompat.requestPermissions( MainActivity.this, new String[] { android.Manifest.permission.ACCESS_FINE_LOCATION }, 0 ); } else{ Location location = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); String provider = location.getProvider(); double longitude = location.getLongitude(); double latitude = location.getLatitude(); double altitude = location.getAltitude(); txtResult.setText("위치정보 : " + provider + "\n" + "위도 : " + longitude + "\n" + "경도 : " + latitude + "\n" + "고도 : " + altitude); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, gpsLocationListener); lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1, gpsLocationListener); } } }); } final LocationListener gpsLocationListener = new LocationListener() { public void onLocationChanged(Location location) { String provider = location.getProvider(); double longitude = location.getLongitude(); double latitude = location.getLatitude(); double altitude = location.getAltitude(); txtResult.setText("위치정보 : " + 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) { } }; }
[activity_main.xml]
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <Button android:id="@+id/button1" android:text="내 위치정보 가져오기" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/txtResult" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
6. 구현화면 및 구현영상
'IT 개발 > 안드로이드개발' 카테고리의 다른 글
안드로이드 HTTP(POST)방식으로 데이터 받기 (0) | 2018.10.26 |
---|---|
[안드로이드] 리스트(List)만들기 - RecyclerView이용. (0) | 2018.10.23 |
[안드로이드] 스피너(Spinner)이용하기 - ArrayList, ArrayAdapter사용. (3) | 2018.10.19 |
[안드로이드] 액티비티(화면)전환, Intent이용 (0) | 2018.10.19 |
[안드로이드] JSON 파싱 - JsonArray 가져오기 (3) | 2018.10.12 |
[안드로이드]Json 파싱 - URL에서 JSON 읽기 (0) | 2018.10.12 |
[안드로이드] 권한요청/ 권한설정, 퍼미션체크 (2) | 2018.10.09 |
[안드로이드] EditText에서 텍스트입력 한줄로 제한하기(singleLine) (4) | 2018.10.05 |