0
Thumbsup

いい質問だ

0

Thumbsdown

うーん

AndroidのGPS連続取得について

zuxikku
zuxikku 20

投稿日:2012-11-14 12:35:54

GPSログアプリを作成しようとしているのですが、Androidでの連続取得がうまくいきません。
iPhoneのシュミレーターでは連続取得可能なのですが。。。
以下のソースの様にGPS情報を取得しているのですが、時たまGPS情報が更新されるだけでそのトリガーも見つけられていません。
どなたか原因を推察できる方いらっしゃいますでしょうか?

Ti.Geolocation.purpose = "GPSログを取得します"
    setInterval(function(){
    Ti.Geolocation.accuracy = Titanium.Geolocation.ACCURACY_BEST;
    Titanium.Geolocation.getCurrentPosition(function(e){
    if(e.error){
        alert(e.error);
        return;
    }
     nowdate = e.coords;
        var lat = e.coords.latitude;
        var lon = e.coords.longitude;
   });
}, 10);





回答

isis331
isis331
260

Thumbsup

いい回答

0

Thumbsdown

うーん

エミュレータで実行されてますでしょうか?
多分、
http://d.hatena.ne.jp/bs-android/20090203/1233675390
が参考になると思います。
実機でも、位置情報の更新はすごくまばらです。端末のGPSの性能も機種によってまちまち。
屋内で開発していると、GPSの電波が拾えてないこともありますね。


zuxikku
zuxikku
20

Thumbsup

いい回答

0

Thumbsdown

うーん

いえ、実機で実行しています。
それは機種に依存するということでしょうか?
例えばアプリを一度落としてGPS再取得を行なっても古いデータのままなのです。
なのでGPSを再取得しに行っていないのではないかと考えているのでしょうがどうでしょうか?
例えばGoole純正のナビなどは追従速度が速いですがTitaniumではあの様なものを作るのは難しいのでしょうか?


isis331
isis331
260

Thumbsup

いい回答

0

Thumbsdown

うーん

端末のGPSの性能に左右されるので、Javaネイティブで書いてもサンプルコードのままだと、多分実用的ではないです。
たとえば、
http://d.hatena.ne.jp/orangesignal/20101227/1293469839
なんかに、難しさが現れています。
>例えばアプリを一度落としてGPS再取得を行なっても古いデータのままなのです。
最前に取得したやつを仮に返してきてるんです。最前がとっても前だったりしますが ...
使ったことないけど、Titanium.Geolocation.Android
にAndroid専用の
LocationProvider
とか
LocationRule
があるので、もしかするとこれで、いろいろできるかな??
それから、端末の設定で、"GPS機能"の他に"Googleの位置情報サービス"にもチェック入れておくと少しましになるかも.


zuxikku
zuxikku
20

Thumbsup

いい回答

0

Thumbsdown

うーん

Titanium.Geolocation.Androidとなるものがあったのですね。本ばかり見てたので公式を見落としていました。
プログラミング自体初心者でまだあまりわかっていないのですが、AndroidやiOSのGPSはアプリが取得してきてという指令を受けてGPSを取得するわけではないのでしょうか?
ってきりTitanium.Geolocation.getCurrentPositionはGPSに取得を促す指令かと思っていたのですが・・・


isis331
isis331
260

Thumbsup

いい回答

0

Thumbsdown

うーん

基本的に裏でサービスが走って、衛星から電波が取れて、位置情報が取れたらアプリにイベントを返す仕組みになっていると思います。
アプリ側はサービスに対して、取得の頻度などを要求できますが、要求通りいくかどうかは、衛星の状態とか、端末のGPSの性能とか、いろいろな条件で変わってくると思われます。
なので、不確定な要素があるんです。


umi_uyura
umi_uyura
140
Tcad_icon

Thumbsup

いい回答

0

Thumbsdown

うーん

英語弱いので間違っていたら申し訳ありませんが、
リファレンスのTitanium.Geolocation.getCurrentPositionを読むと
Androidでは「a cached location is used.」とあるので、
やはりキャッシュしている位置情報を使っていて、
それを更新したりはしていないのかもしれないですね。
http://docs.appcelerator.com/titanium/2.1/#!/api/Titanium.Geolocation-method-getCurrentPosition
位置情報の継続的な取得は、下記URLに掲載されているように、
Titanium.Geolocationのlocationイベントを利用すると良いのではないでしょうか。
http://docs.appcelerator.com/titanium/2.1/#!/guide/Tracking_Position_and_Heading-section-29004915_TrackingPositionandHeading-ContinuallymonitortheGPSposition


zuxikku
zuxikku
20

Thumbsup

いい回答

0

Thumbsdown

うーん

なるほど。リファレンス読みました。確かにAndroidは自らGPS情報を更新しに行くわけではなさそうですね。
これはTitanium自体の実装方法に問題があると考えていいのかそれともAndroid全体の仕様なのでしょうかね?
もしTitaniumの問題であればモジュールでなんとかなりそうだとは思うのですが・・・


ログインすると回答することができます。