0

場所を取得するための新しい API を使用しています: android. https://developer.android.com/training/location/retrieve-current.html

場所を取得すると、時代遅れになることがあります。ある場所に出て別の場所に行くと、アプリケーションは最初の場所の場所を返します。WiFiを外したときに発生します。WiFiを使用すると、完全に機能します。いくつかの方法または何かが欠けていますか?

public class NewGPSTracker implements
    GooglePlayServicesClient.ConnectionCallbacks,
    GooglePlayServicesClient.OnConnectionFailedListener,
    LocationListener, com.google.android.gms.location.LocationListener {


private LocationRequest lr;
private LocationClient lc;
Location location;
double latitude = 0;
double longitude = 0;
Context context;
static Boolean status = false;  
public int res = 0;
boolean conectado;

public  NewGPSTracker(Context context) {
    this.context = context;
    lr = LocationRequest.create();
    lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    lr.setInterval(5000);       
    lr.setFastestInterval(1000);
    lc = new LocationClient(context, this, this);       
}

@Override
public void onLocationChanged(Location location) {  

    if (conectado) {
        lc.removeLocationUpdates(this);
        lc.requestLocationUpdates(lr, this);
        location = lc.getLastLocation();
        if(location != null){
            latitude = location.getLatitude();
            longitude = location.getLongitude();
        }

    }

}

@Override
public void onConnectionFailed(ConnectionResult arg0) {     
    Log.e("NewGPSTracker", ""+arg0);

}       

@Override
public void onConnected(Bundle connectionHint) {
    conectado = true;
    Log.i("NewGPSTracker", "Google Play Services Conectado.");
    lc.requestLocationUpdates(lr, this);    

    location = lc.getLastLocation();

    if(location != null){
    latitude = location.getLatitude();
    longitude = location.getLongitude();

    }
}   

public double getLatitude() {
    return latitude;
}

public double getLongitude() {
    return longitude;
}   


public void connect(){
    lc.connect();
}

public void disconnect(){
    lc.disconnect();
}   


@Override
public void onDisconnected() {

}


public void onProviderDisabled(String arg0) {
    // TODO Auto-generated method stub

}

public void onProviderEnabled(String arg0) {
    // TODO Auto-generated method stub

}

public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
    // TODO Auto-generated method stub

}

}

4

2 に答える 2

0
lr.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

私はあなたが何を使っているのか正確にはわかりません。しかし、この状況でGoogle APIを使用すると、そのような問題が解決しました。

上部に常にGPS/WI-FI のHIGH_ACCURACYを使用する行があります。そして、あなたの状況は常にWI-FIのように見えます.ご存知のように、ユーザーの場所を見つけるには2つの方法があります。(GPS/WI-FI) GPS の場所を変更し、WI-FIを開かないと、最初に表示され続けるはずです。

可能であれば、GPS のような静的変数として変更してみてください。

私の悪い英語、複雑な状況で申し訳ありません..

于 2013-10-31T15:46:08.407 に答える
0

その場所のタイム スタンプと現在の時刻の差を計算します。数秒以上の場合は、古い位置、たとえば最後に確認された位置です。その場合、時間差が数秒以内になるまで次の位置を待ちます。

于 2013-10-31T17:09:06.590 に答える