トップ地図アプリMap3 > 位置情報を取得し続ける
broadcastされた位置情報を受け取る

位置情報を取得し続ける

はじめに

以前に比べて位置情報取得が止まってしまっていることが多くなった。 まだ、その詳細は掴んでいない。

位置情報取得サービス自体は動作しているが、位置情報取得が何らかの理由で行われなくなったように見えるが、 そうでないのかも知れない。

現状調査

日付指定で位置情報軌跡を地図上に表示する

cvs形式のGPSログではチェックしきれないので、指定した日付のログを地図上に表示して、 位置情報取得状況をチェックしたい。

一般的な日付選択には DatePickerDialog が適しているかもしれないが、 今回は過去数日間のGPSログから一つ選択するだけでよいので、メニューあるいはポップアップウィンドウに ラジオボタンを並べる形の方がスリムでよいと思われる。いずれか実装が簡単な方を選びたい。

メニューをコードで表示している場合には、メニューに直近の数日分の日付をラジオボタンとして表示するのが 簡単であるが、メニューは xmlファイルで定義しているので、ポップアップウィンドウの方が楽であろう。

MapXでは、バス停アイコンをタップすると、そのバス停に止まるバス路線番号ボタンが画面下部にポップアップ され、路線番号ボタンをタップするとそのバス路線が地図上に強調表示されるようにしている。

これを流用する。路線番号はGPSログの日付に変更する。


上記のようなポップアップは MapX に実装済みであった。ただし、直近の GPSログには対応しておらず、 過去のGPSログを少し処理したものが対象であった。したがって、これを直近のGPSログにも対応できるように拡張すればよい。

生のGPSログのファイル名は日付であるが、これに境界ボックスを付け加えるように加工する。


変換プログラムを map3 に実装した。これにより、昨日(高尾山)のログを確認した。 タブレットについては途切れがほとんどなかったが、スマホでは何か所かで途切れがある。

昭和記念公園を歩いた記録でも、スマホでは何度も途切れがある。

おそらく、Android のサービスが止まったのではなく、位置情報取得が止まったものと思うが、 念のため、1分間隔で監視して、位置情報取得がなかった場合、エラーログを書き込んでみる。

履歴・メモ

2023.12.15 位置情報取得サービス概ね完成

MapXよりかなり簡単化できたので、別アプリとはしなかった。

2023.12.14 1分ごとの監視はディープスリープを妨げるか?

就寝時の電池使用量が大きくなったような気がする。

2023.12.13 位置情報取得間隔の変更を単純にしてみる

現在は取得間隔を Home、Slow、Walk、Viecle に分けている。この切替にバグがあるかも知れない。 一旦は Home と Out の二つにしてみる。電池使用量が大差なければシンプルにしたい。

2023.12.13 「外出により5秒間隔に変更する」が複数回実行されている

12秒か13秒間隔で20数回続いている。続く回数はもっと少ないこともある。

プログラムを下に示す。

  if ((!atHome && interval > IntervalWalk) && !fPC) {
      Utils.writeLog("srvlogs", "外出により5秒間隔に変更する");
      interval = IntervalWalk;
      high_accuracy = true;
      requestLocationUpdates(interval, high_accuracy);
  }

ここで変更しても、すぐ後で IntervalWalk(5秒)より遅い IntervalSlow(10秒) に変更している。

2023.12.13 位置情報取得停止&再開

サービス自体は動き続けるが、GPS電源が切られるようだ。

位置情報取得が1分程度なかったときの位置情報取得停止&再開がうまく行くかどうかは未確認である。

2023.12.12 やはり位置情報取得がストップする

今日はスーパーマーケットに入ってしばらくして位置情報取得がストップした。 また、その後、バス停で5分ほどバス待ちをしたが、そのときもストップした。

位置情報取得を一旦終了させ、再度、スタートさせてみよう。

リファレンス

[1] GPSログが途切れる場合の対策
[2] KotlinでGPS位置情報取得する完璧な方法12選
[3] 現在地の更新情報をリクエストする