LocationListenerのonStatusChangedの挙動を勘違いしてました。
GPS信号がきちんと受信できているかどうかを確認するのにonStatusChangedを使うのかと思ってたら、
GPSプロバイダが 「利用できるようになった時」「利用できなくなった時」「一時的に利用できなくなった時」にonStatusChangedが呼ばれるのね。
つまり長い間GPS信号を受信してなくても、プロバイダに問題が無ければonStatusChangedは呼ばれないという事か。
ずっとLocationが全然更新されなくて、onStatusChangedが呼ばれないのでバグかと思ってました…
じゃあ、GPS信号の受信状態を確認するにはどうすればいいか。
代替案として、
GpsStatus.Listenerを使って、GPSの状態を確認すればよさそう。
という事で落ち着いた。
public class TestActivity extends Activity implements LocationListener, GpsStatus.Listener{
//最後にGPSを受信したタイムスタンプ
private long lastRecieve;
//LocatoinManager
private LocationManager locationManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// LocatoinManagerインスタンスを取得する
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);
locationManager.addGpsStatusListener(this);
}
@Override
public void onGpsStatusChanged(int event) {
//GPS衛星の状態が変化したら
if (event==GpsStatus.GPS_EVENT_SATELLITE_STATUS){
if (lastRecieve - new Date().getTime() >= 15000){
//15秒以上受信してなかったら、処理をここに書く
}
}
}
@Override
public void onLocationChanged(Location location) {
//最後にLocationChangeした時間を記録する
lastRecieve = new Date().getTime();
//以下、GPS受信した時の処理を書く
・・・
}
・・・
}
こんな感じ?
最近のコメント