1

私は次のコードを持っています:

LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);

およびMyLocationListenerクラス:

public class MyLocationListener implements LocationListener{

        @Override
        public void onLocationChanged(Location loc){
        loc.getLatitude();
        loc.getLongitude();
        tv_GPSlat.setText("Latitude: " + loc.getLatitude());
        tv_GPSlon.setText("Longitude: " + loc.getLongitude());
        }

        @Override
        public void onProviderDisabled(String provider){
        Toast.makeText( getApplicationContext(),"GPS is not working", Toast.LENGTH_SHORT ).show();
        }

        @Override
        public void onProviderEnabled(String provider){
        Toast.makeText( getApplicationContext(),"GPS is working",Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras){
        }
    }

TextView現在の経度と緯度をs ( tv_GPSlat、 )に保存したいのtv_GPSlonですが、位置の値は一定ではありません (常に変化しています)。これどうやってするの?

4

4 に答える 4

0

なぜ誰もこれに言及しなかったのだろうか。私は何かが足りないのかもしれません。あなたが行った呼び出しは0,0です。ミリ秒、distanceinmetersが必要です。このように位置変更は、特定の距離を移動したとき、またはタイムアウト後にのみ呼び出されます。私はGPSプロバイダーとNETWORKプロバイダーの両方を使用して、どちらにも依存しないようにしています(GPSが信頼できない場合もあります)。

    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, God.KM20TIME,
            God.KM20DISTANCE, (LocationListener) updates);
    lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, God.KM20TIME,
            God.KM20DISTANCE, (LocationListener) updates);
于 2013-01-27T04:16:09.670 に答える
0

場所を取得する必要があり、それを取得したら (つまり、ハンドラー メソッドが呼び出されたら)、更新の受信を停止するためにハンドラーの登録を解除する必要があります。のハンドラ メソッドの最後に次の行を追加するだけonLocationChanged()ですMyLocationListener

LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mlocManager.removeUpdates(this);
于 2013-01-27T02:56:55.217 に答える
0

GPS は正確ではありません。移動しなくても、少し跳ね返ります。取得した最初の場所を表示し、一定量以上移動しない限り、将来の更新を無視します。それが最も簡単な方法です。

于 2013-01-20T00:56:32.107 に答える
0

データ メンバーをロケーション リスナーに追加し、以前のロケーションを保持します。

public class MyLocationListener implements LocationListener {

    public Location mSavedLocation;

    @Override
    public void onLocationChanged(Location loc) {
        // If we don't have saved location, or the distance between
        // the saved location and the new location is bigger than
        // 5 meters (~15ft) save the new location
        if ((mSavedLocation == null) ||
            (loc.distanceTo(mSavedLocation) > 5)) {
            mSavedLocation = loc;
        }
        // Update the screen with the current saved location
        tv_GPSlat.setText("Latitude: " + mSavedLocation.getLatitude());
        tv_GPSlon.setText("Longitude: " + mSavedLocation.getLongitude());
    }

    // ... no changes to the rest of the class
}

これで、コードの残りの部分でも、次を使用して最新の保存場所を取得できます。

mlocListener.mSavedLocation
于 2013-01-27T03:12:52.313 に答える