[[Gps/ AndroidでGPSセンサを利用]]

GPS での緯度経度取得の基本

http://jp-shibax.air-nifty.com/blog/2010/07/gps-3b04.html

android端末でGPSを利用して緯度経度を取得する際のホントの基本コードです。

public class MainAct extends Activity implements
LocationListener,
GpsStatus.Listener
{
	LocationManager mLocMan;
	InnerState mInnerState = new InnerState();

	public final static String LOG_TAG = "GpsTest";

	@Override
	public void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.main);
	mLocMan = (LocationManager) getSystemService(LOCATION_SERVICE);
	// GPS状態取得
if(!mLocMan.isProviderEnabled(LocationManager.GPS_PROVIDER)){
	Log.d(LOG_TAG, "GPS is disabled.");
	return;
	}else{
	Log.d(LOG_TAG, "GPS is Enabled.");
	}
	}
	@Override
	protected void onResume() {
	mLocMan.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
	mLocMan.addGpsStatusListener(this);
	Log.d(LOG_TAG, "Start Location Update.");
	super.onResume();
	}

	@Override
	protected void onPause() {
	mLocMan.removeUpdates(this);
	mLocMan.removeGpsStatusListener(this);
	super.onPause();
	}

	public void updateTextview(){
	String szMsg = "";
	szMsg = "lat = " + String.valueOf(mInnerState.latitude ) + "\n";
	szMsg += "lon = " + String.valueOf(mInnerState.longitude) + "\n";
	szMsg += "alt = " + String.valueOf(mInnerState.altitude ) + "\n";

	if(mInnerState.satellites!=null){
	int nFind=0, nUse = 0;
	for(GpsSatellite one : mInnerState.satellites){
	nFind ++;
	nUse += one.usedInFix()? 1: 0;
	}
	szMsg += "Find = " + String.valueOf(nFind) + " ";
	szMsg += "Used = " + String.valueOf(nUse) + "\n";
	szMsg += "accr = " + String.valueOf(mInnerState.accuracy) + "\n";
	szMsg += "Powr = " + String.valueOf(mInnerState.powerReq) + "\n";
	}

	((TextView)findViewById(R.id.TextView01)).setText(szMsg);
	}


	// by LocationListener
	@Override
	public void onLocationChanged(Location arg0) {
	Log.d(LOG_TAG, "onLocationChanged...");
	mInnerState.latitude = arg0.getLatitude();
	mInnerState.longitude = arg0.getLongitude();
	mInnerState.altitude = arg0.getAltitude();
	this.updateTextview();
	}
	// by LocationListener
	@Override
	public void onProviderDisabled(String provider) {
	Log.d(LOG_TAG, "onProviderDisabled...");
	}
	// by LocationListener
	@Override
	public void onProviderEnabled(String provider) {
	Log.d(LOG_TAG, "onProviderEnabled...");

	}
	// by LocationListener
	@Override
	public void onStatusChanged(String provider, int status, Bundle extras) {
	Log.d(LOG_TAG, "onStatusChanged...");
	}
	// by GpsStatus.Listener
	@Override
	public void onGpsStatusChanged(int event) {
	Log.d(LOG_TAG, "onGpsStatusChanged...");
	// GpsStatus.Listenerで呼ばれる
switch(event){
	case GpsStatus.GPS_EVENT_STARTED:
	Log.d(LOG_TAG, "GPS_EVENT_STARTED");
	break;
	case GpsStatus.GPS_EVENT_STOPPED:
	Log.d(LOG_TAG, "GPS_EVENT_STOPPED");
	break;
	case GpsStatus.GPS_EVENT_FIRST_FIX:
	Log.d(LOG_TAG, "GPS_EVENT_FIRST_FIX");
	break;
	case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
	GpsStatus st = mLocMan.getGpsStatus(null);
	LocationProvider prod = mLocMan.getProvider(LocationManager.GPS_PROVIDER);
	mInnerState.satellites = st.getSatellites();
	mInnerState.accuracy = prod.getAccuracy();
	mInnerState.powerReq = prod.getPowerRequirement();
	updateTextview();
	break;
	}
	}

	public class InnerState{
	public double latitude = 0;
	public double longitude = 0;
	public double altitude = 0;
	public Iterable<GpsSatellite> satellites = null;
	public int accuracy = 0;
	public int powerReq = 0;
	}
}
やってる事は・・・
getSystemService(LOCATION_SERVICE) で LocationManagerを取得して
LocationManager#requestLocationUpdate で位置更新のリスナを登録して
LocationManager#addGpsStatusListener でGPSの状態更新のリスナを登録して

あとは、それぞれのイベントを処理しているだけです。
参考まで。。。(って参考にならないか。)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS