ロケーションの更新を受信したときにスレッドでコールバックを行うために、次のコードを作成しました (これがメイン スレッドです)。
Handler handler; // this Handler is initialized in the following thread
Runnable r = new Runnable() {
public void run() {
Looper.prepare();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Log.d("MSG", msg.toString());
}
};
Looper.loop();
}
};
Thread t = new Thread(r);
t.start();
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
public void onLocationChanged(Location location) {
Log.d("UPD", "onLocationChanged");
}
[...]
}, handler.getLooper());
更新が受信されたときにログに MSG が表示されることを期待しています。代わりに、UPD 行は表示されますが、MSG は表示されません。
では、ルーパーを渡したときの requestLocationUpdates の正しい動作は何ですか?