GPS ロガー & ログ整形アプリのAndroid 11 対応のまとめ

スマホをPixel 4aに換えてから一ヶ月あまり、GPSロガー FarEast3とログ整形アプリmichiの対応が終わりました。とりあえず動かせるレベルですが…

■ GPS: NMEA-0183 出力が変わった
については→ NMEAで$GNGGAを取る

■ フォアグラウンド サービスが必要になった。
上記に対応して動かしてみるとデバッグで動作の確認はOK。
実際にログを撮ってみると、何か変?試してみると、
・アプリを前面に出してると問題なし。
・アプリをバックグラウンドにしても問題なし。
・ディスプレイをOFFにするとNMEAデータが取れてない。

色々とgoogleってみると、android 11以降はバックグラウンドでは位置情報はじめ何かと制限が付くらしい。フォアグラウンド サービスを利用して5秒毎にアクセスする、というのが一般的な回避策みたい。次を参考に実装してみた。
[Android] Service の使い方

汚い実装になったけど、とりあえずの動作は問題ないみたい。今回の実装を整理したい、フラグメント周りで非推奨が増えている、など手を入れたい箇所が沢山残りました。

NMEAで$GNGGAを取る

Pixel 4a のNMEAで取得したデータを比べてみたら、これまでのものと形式が随分と変わっていました。

ざっとまとめると、こんな感じ。

  1. Pixel 4a はGPS以外にも対応するシステムが多い
  2. NMEAのフォーマットが拡張されてGPS以外のシステムにも対応している
  3. Androidで取得したNMEAデータにはGPS以外のシステムのデータも含めて入っている
  1. Pixel 4a はGPS以外にも対応するシステムが多い
    Pixel 4aの仕様を改めて見てみると、すごいですね。
    GPS、GLONASS、Galileo、QZSS、BeiDou
    ちなみにQZSSが日本の「準天頂衛星システムみちびき」ですね。
  1. NMEAのフォーマットが拡張されてGPS以外のシステムにも対応している
    NMEAの仕様 NMEA 0183 Standard Version 4.11 も進んでいるんですね。私が以前に調べたのは10年前でした。
  1. Androidで取得したNMEAデータにはGPS以外のシステムのデータも含めて入っている
    次をみるとGLONASSのデータのとり方があった。
    生の GNSS 測定値

まぁ、色々と疑問は残ったわけですが。
旧来のようにGPS情報だけ取得する方法、とか無いのかな?
NMEAデータを取る前に、対応したシステム情報を取得する方法は?

とりあえず、$GPGGAが取れないようなので、複合化された$GNGGAを取るのが良いかな。

NMEAで$GPGGAが取れない

FarEast3 のお話。GPSログ取り用の自作Androidアプリです。

Android 9から10になってログ取り始めるとアプリが落ちていたので、改修しよう。と思って始めないうちにAndroid 11になりましたが、落ちるのは相変わらずでした。

とりあえず、パーミッション周りが変わったので対応、しかしやはり落ちる。落ちる箇所が見つかりましたが、取得した “$GPGGA” の時刻をパースしているところでした。取得した$GPGGAのデータが空でした。”$GPGGA,,,,,,0,,,,,,,,*66″ こんな感じ($GPGGAの次がdoubleの時刻)。これまでココで落ちてなかったので、このように時刻が空で帰って来ることは無かったはず。

取得したテキストをそのまま保存しているだけだし、NMEAのデータ取得は問題なさそう。$GPGGA以外はパッと見それらしきデータが入っているようす。

うーん、何が問題なのだろう?