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 でエラーがでるようになったようだ。なのでつけないほいがいい、ないしブラウザ判定を入れる必要がある