そのため、GPS 受信機が衛星にロックオンするまでにしばらく (約 10 ~ 12 秒) かかることはよく知られている事実です。Android LocationListener を使用して、位置情報の更新が開始されたときに通知を受け取りたいと考えています。例えば:
LocationListener をインスタンス化して呼び出すための次のコードを含むアクティビティがあります
public void startLocationUpdates() {
try{
Common.locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
listener = new LocListener();
if(Common.locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
Common.locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);
} else if(Common.locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
Common.locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener);
}
}catch(Exception e) {
e.printStackTrace();
}
}
これが LocationListener onLocationChanged 実装です。
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
try{
Common.currentLocation = new String(String.valueOf(location.getLatitude()) + "," + String.valueOf(location.getLongitude()));
Log.i("LocListener",Common.currentLocation);
} catch(Exception e) {
e.printStackTrace();
}
}
Common.currentLocation 文字列は、locationUpdates の開始後に更新されます。ただし、このフィールドが更新されるまでメイン アクティビティを待ちたいと思います。
Common.currentLocation フィールドが更新されるのを待機する while ループをアクティビティに配置すると、スレッドが中断され、onLocationChanged メソッドが呼び出されません (ログ メッセージは出力されません)。
onLocationChanged が呼び出されて緯度と経度の値が利用可能になるとすぐに、 onLocationChanged メソッドから共通のインターフェイス/アクティビティに更新を取得する最良の方法は何ですか? どんな助けでも大歓迎です。