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
Last-modified: 2013-06-28 (金) 16:16:46 (3962d)