5

ネットワークプロバイダーを介して生成しているnullを取得した場合、最初にgpsプロバイダーを介して場所を生成しようとしています。私の問題は、ネットワーク プロバイダーが同じ場所を 2 回生成することです。情報をデータベースに送信すると、同じ時間 (同じ秒数) で同じ場所が送信されます。ここにいくつかのコードがあります:

gpsLocation = requestUpdatesFromProvider(LocationManager.GPS_PROVIDER, R.string.not_support_gps);
networkLocation = requestUpdatesFromProvider(LocationManager.NETWORK_PROVIDER, R.string.not_support_gps);
    // Update the UI immediately if a location is obtained.
if (gpsLocation != null) 
    updateUILocation(gpsLocation);
else
    updateUILocation(networkLocation);

requestUpdateFromProvider は次のとおりです。

private Location requestUpdatesFromProvider(final String provider, final int errorResId) 
{
    Location location = null;
    if (mLocationManager.isProviderEnabled(provider)) 
    {
        mLocationManager.requestLocationUpdates(provider, TEN_SECONDS, TEN_METERS*2, listener);
        location = mLocationManager.getLastKnownLocation(provider);
    } 
    else
    {
        Toast.makeText(this, errorResId, Toast.LENGTH_LONG).show();
    }
    return location;
}

updateUILocation は次のとおりです。

private void updateUILocation(Location location) 
{
    // We're sending the update to a handler which then updates the UI with the new location.
    Message.obtain(mHandler,
            UPDATE_LATLNG,
            location.getLatitude() + ", " + location.getLongitude()).sendToTarget();

    // Bypass reverse-geocoding only if the Geocoder service is available on the device.
    if (mGeocoderAvailable) 
        doReverseGeocoding(location);
}

ハンドラーは次のとおりです。

    mHandler = new Handler() 
    {
        public void handleMessage(Message msg) 
        {
            if(msg.what == UPDATE_ADDRESS) //UPDATE_ADDRESS = 1
            {
                LocationService.this.address = (String) msg.obj; // update a string that show the user address
                new SendLocation(LocationService.this.id,(String)msg.obj);//send the info to the db.
            }
        }
    };

SendLocation は本来の動作を正しく行っているため、注意を払う必要はありません。

編集

コードの最初の部分は、コンストラクターから呼び出されるメソッドであることを忘れていました。

4

1 に答える 1

0

重複した場所が作成されたのがあなたのせいでない場合forwardLocation(Location loc)は、最後に受信した場所のタイムスタンプを保存した同期メソッドを呼び出すだけです。このメソッドは、最後に保存されたタイムスタンプが前のタイムスタンプと等しい場合、その場所を無視します。

于 2014-06-30T18:50:50.973 に答える