2009年 10月 07日

Android の geolocation で GPS を使う方法

Android には Gears が入っていて、gears の geolocation API が使えることは使えるのだけど、GPSをちゃんと使う方法がなかなかわからなかったのでメモ (素朴に使うと WiFi + IP アドレス?しか使わないっぽくて、とれないことが多い)

var geo = navigator.geolocation || google.gears.factory.create('beta.geolocation');

geo.getCurrentPosition(
        function (pos) {
                alert([pos.coords.latitude, pos.coords.longitude].join(','));
        },
        function (e) {
                alert(e.message);
        },
        {
                enableHighAccuracy: true
        }
);

enableHighAccuracy が true じゃないと GPS 情報を使わないようだ。このままだと Google の Geoloation API をまだ叩きにいく。さらに gearsLocationProviderUrls: [] とか指定すれば、純粋にGPSだけの情報がとれるようだ。

        {
                enableHighAccuracy: true,
                gearsLocationProviderUrls: []
        }

ただ、なんか GPS のタイムアウト時間が短いので、前もって別のアプリケーションで GPS fix させてからじゃないとダメな気がする。要検証。watchPosition でとれるまで待つという方法もあるかもしれない

追加検証してみたけど、ちゃんと座標を取得したいなら、watchPosition でとれるまで待って、clearWatch するのがよさそう (キャンセルボタンもつけて)。

watchPosition ならとれるまで試行できる。

gearsLocationProviderUrls: [] を指定すると Chrome でエラーがでるようになったようだ。なのでつけないほいがいい、ないしブラウザ判定を入れる必要がある