[[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の状態更新のリスナを登録して あとは、それぞれのイベントを処理しているだけです。 参考まで。。。(って参考にならないか。)