Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(Android) GPS 로 현재 이동 속도 알아오기

안드로이드 개발
반응형

안드로이드(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

		}
	}
}
반응형
Posted by 녹두장군

댓글을 달아 주세요