私は自分のロケーションクラスを持っています。私のクラスを使用して GPS 位置を検索すると、0, 0 が返される可能性があります。
一方、GPS のロケーション マネージャーで getLastKnown 関数を検索すると、次の強制値が取得されます。
public Location getGPSloc(Context c){
isGPSavailable(c);
if(gps_enabled)
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, locationListenerGps);
timerGPS = new Timer();
timerGPS.schedule(new GetLastLocationGPS(), 45000);
return gpsLoc;
}
これは、関数の外部から呼び出しているクラスです。呼び出しで this.getApplicationContext() を使用しています。これは GetLastLocationGPS() です。
class GetLastLocationGPS extends TimerTask {
@Override
public void run() {
lm.removeUpdates(locationListenerGps);
if(gps_enabled){
gpsLoc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);}
else{
gpsLoc = null;
}
}
}
リスナーは次のとおりです。
LocationListener locationListenerGps = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
timerGPS.cancel();
gpsLoc = location;
lm.removeUpdates(this);
}
@Override
public void onProviderDisabled(String provider) {}
@Override
public void onProviderEnabled(String provider) {}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {}
};
MyLocationInstance.getGPSloc(this.getApplicationContext()) を呼び出すと、戻り値は常に 0, 0 です。エミュレータに送信した強制値 83 43 があり、LocationManagerInstance.getLastKnownLocation(LM.GPS) にサブスクライブすると表示されます。 ;
このメソッドが場所を取得しない理由がわかりません。
理論的には、呼び出しが発生したときにタイマーがまだ実行されているためですか? それが私が答えを思いつくことができる唯一の方法です。他のアイデアはありますか?