OKコードブレーカー、これが私のロケーションフェッチャーの実装方法です:
// the listener to listen to the locations
private LocationListener listener = null;
// a location manager
private LocationManager lm = null;
// locations instances to GPS and NETWORk
private Location myLocationGPS, myLocationNetwork;
// instantiates fields
lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
myLocationNetwork = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
myLocationGPS = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
listener = new myLocationListener();
// the listener that gonna notify the activity about location changes
public class myLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location location) {
// "location" is the RECEIVED locations and its here that you should proccess it
// check if the incoming position has been received from GPS or network
if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
lm.removeUpdates(this);
} else {
lm.removeUpdates(listener);
}
}
@Override
public void onProviderDisabled(String provider) {
lm.removeUpdates(this);
lm.removeUpdates(listener);
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
ご覧のとおり、それほどトリッキーなことはありません。リスナーをインスタンス化すると、Android デバイスの上部に GPS アイコンが表示されます。また、位置が変わるたびに (デバイスを持って歩いているときなど)、OnLocationChanged メソッドが呼び出されます。
また、場所を取得したいだけの場合は、いくつかの方法があり、すべての方法で返される速度と精度が異なります。また、GoogleGLM ( http://www.google.com/glm/mmapへのリクエストで、あなたの位置を含む json エンコードされた文字列を返します) サービス、三角測量、およびネットワーク別の場所も確認してください。上記のスニペットでは、GPS とネットワークのいずれかを使用して位置情報を取得する方法を示しました。それが助けになったことを願っています... :)