[Android] バックグラウンドでGPSログを取り続けるには

GPSのログを取り続けるためにはどうするといいのでしょうか。システムはすぐにスリープ、Dozeに入れてバッテリー消費を抑制しようとします。ただし、バックグラウンドなのですがいわゆるforegroundという形での記録ができます。
 
gps background 01 - [Android] バックグラウンドでGPSログを取り続けるには

Android Studio 3.1
Android 8.1

 



GPSログ

 
GPSでログを取るためには現実的に裏にいないとできません。ネットサーチをしながらラインをやりながら裏でログを取るということです。ただ昨今のバックグラウンド制限が厳しくなってきたため、それを回避するためにはServiceとNotificationを使ってフォアグランドにいるようにすることで可能です。

service 01 84x150 1 84x100 - [Android] バックグラウンドでGPSログを取り続けるには
Servce はバックグラウンドで作業をさせたい場合に使います。システムは直ぐにスリープに入れてしまいます。それでも裏で色々やりたい場合に有...

この内容とGPS測位、内部ストレージでの保存を使っていきます。
 

 

startForegroundService

 
ActivityからstartForegroundService()でServiceを開始し、Service内で5秒以内に
startForegroundを呼び出します。これでステータスバーにはアイコンが表示されてForgroundにいるかのようになります。
 
Activity

 
Service

ここでアイコンは意外と重要で、これが無いと設定できません。理由はおそらく、ユーザーに対してアプリが起動中であることを明示するものだと思います。こっそりバックグラウンドで動き続けるゾンビにならないような施策でしょう。

 

サンプルコード

 
基本的には、GPS パーミッションを考慮して実装する で説明したようにGPSの設定をします。最初にPermissionが必要なので、ACCESS_FINE_LOCATIONのpermissionを設定。
 
AndroidManifest.xml

 
MainActivityではパーミッションの確認をします。
許可を確認できるとLocationServiceへ遷移します。今回はログの保存先を内部ストレージにしました。また複数のパーミッションの許可を取得するテイで作ってあります。
 
MainActivity.java

 
ここから位置測定のコードになります。
「Start」ボタンで測位と書き込みを実行することができ位置情報を取得すると外部ストレージに保存します。
「Log」ボタンで保存した履歴を表示させます。
「Reset」で履歴を消し、GPSも止めます。
 
LocationService.java

 
次に、内部ストレージへの書き込み、読み出しのクラスを作ります。
 
InternalFileReadWrite.java

 
レイアウトはこのようになります。呼び出した履歴はスクロールで表示させます。
 
activity_main.xml

 
リソースです
strings.xml

 
gps background 01 - [Android] バックグラウンドでGPSログを取り続けるには

このサンプルコードでできたアプリは、マルチタスク ウィンドウから消しても動き続けます。明確にストップさせない限り動き続けますので、実際バッテリーの減りが早くなりました。

 
関連ページ:

 
References:
LocationManager | Android Developers
Criteria | Android Developers
Runtime Permissions | Android Developers
Location Strategies | Android Developers
Location | Android Developers

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加


 


ページのトップへ戻る




シェアする

  • このエントリーをはてなブックマークに追加

フォローする