반응형
안드로이드(Android) GPS 로 현재 이동 속도 알아오기 |
환경 : Eclipse Mars, Android 4.2.2 |
이번예제는 android.location.LocationListener 를 통해 현재 이동하고 있는 속도를 알아 낼수 있습니다. 인수로 넘어오는 Location 객체의 getSpeed() 함수입니다.
속도를 알아오기 위해 AndroidManifest.xml 에 Permission 을 추가해야 합니다. GPS 를 구현하기 위해서는 항상 들어가야 되는 퍼미션입니다.
android:name="android.permission.INTERNET" android:name="android.permission.ACCESS_NETWORK_STATE" android:name="android.permission.READ_PHONE_STATE" android:name="android.permission.ACCESS_COARSE_LOCATION" android:name="android.permission.ACCESS_FINE_LOCATION"
GPS 정보를 가져오기 위해 LocationListener 상속받아 사용자 정의 클래스를 하나 만듭니다. 그리고 onLocationChanged() 함수에 스피드 값을 가져와 화면에 표시해주는 기능을 넣습니다. 인수로 넘어온 Location 객체의 getSpeed() 함수를 이용해 값을 가져오는 것을 알수 있습니다.
@Override public void onLocationChanged(Location location) { if (location != null) { mySpeed = location.getSpeed(); if (mySpeed > maxSpeed) { maxSpeed = mySpeed; } tv.setText("\nCurrent Speed : " + mySpeed + " km/h, Max Speed : " + maxSpeed + " km/h"); } }
메인 activity 의 onCreate 함수에서는 LocationListener 상속받아 만든 클래스를 객체와 해서 LocationManager 에 등록합니다. 그럼 GPS 에 변화가 있을 때 Listener 에서 캡쳐가 가능하겠죠.
lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); ll = new SpeedoActionListener(); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);
이렇게 해서 메인 레이아웃이 없는 activity 의 전체 소스입니다. 간단하게 만들어져서 금방 이해가 갈겁니다.
import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; public class SpeedometerActivity extends Activity { private TextView tv; private LocationManager lm; private LocationListener ll; double mySpeed, maxSpeed; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); tv = new TextView(this); setContentView(tv); maxSpeed = mySpeed = 0; lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); ll = new SpeedoActionListener(); lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); } private class SpeedoActionListener implements LocationListener { @Override public void onLocationChanged(Location location) { if (location != null) { mySpeed = location.getSpeed(); if (mySpeed > maxSpeed) { maxSpeed = mySpeed; } tv.setText("\nCurrent Speed : " + mySpeed + " km/h, Max Speed : " + maxSpeed + " km/h"); } } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } } }
반응형
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) PreferenceActivity 에서 addPreferenceFromResource (0) | 2015.04.29 |
---|---|
안드로이드(Android) EditTextPreference 이용해서 옵션값 셋팅하는 방법 (1) | 2015.04.20 |
안드로이드(Android) PreferenceActivity 이용해서 사용자 정보 셋팅과 정보가져오기 (0) | 2015.03.26 |
안드로이드(Android) 스마트폰 맥주소(Mac Address) 확인하는 방법 (1) | 2015.03.09 |
안드로이드(Android) Thread 를 이용해 로딩페이지 만들기 (2) | 2015.02.23 |
안드로이드(Android) GPS LocationListener 이용해서 도시이름 가져오기 (0) | 2015.02.12 |
안드로이드(Android) PopupWindow 위젯을 이용해 팝업창 만들기 (5) | 2015.02.08 |
안드로이드(Android) 카메라, 갤러리 호출후 이미지 잘래내서 화면에 표시 (12) | 2015.02.05 |