[안드로이드] 현재 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 |