Rxを使って位置情報を得る #もう泣かないC#


酢酸先生が教えてくれたよ!!ありがとう、酢酸先生!!

現在位置が欲しいので、更新が行われたらその時点でgeowatcherを眠らせます。

Android2.3以降のAPIで、一回だけ位置情報の更新を行うってのがあったと思うけど、そんなイメージ。だって、追跡とか必要ないもんね!!

ただ、屋内なんかで利用した時に取得がうまくいかなかったなーなんて場合は、ユーザが任意で再取得できるようにするんだろうね、多分。

んで、コード。

positionchangerxc

            var geoWatcher = new GeoCoordinateWatcher();
            Observable.FromEvent<GeoPositionChangedEventArgs<GeoCoordinate>>(geoWatcher, "PositionChanged").ObserveOnDispatcher()
                //位置情報だけクレ
                .Select(ev => ev.EventArgs.Position.Location)
                //場所が変わると呼ばれる
                .Subscribe(location => {
                    //位置情報を使って何かやる
                    onLocationChanged(location);
                    //一回だけで良いわ
                    geoWatcher.Stop(); });
            geoWatcher.Start();

Subscribeが、何回も呼ばれるなんて知らなかった。

一回呼ばれたら、onCompletedが発動するものと思ってた。

なんだかよくわかんないね!!

Rxに関して詳しく書いてる本があるなら教えて欲しいや・・・