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

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

Android Studio 3.4.2
API 29
AndroidX



GPSログ

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

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

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

 

startForegroundService

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

 
Service

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

 

サンプルコード

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

 
MainActivityではパーミッションの確認をします。
許可を確認できるとLocationServiceへ遷移します。今回はログの保存先を外部ストレージにしました。Runtime Permissionの確認が2つになります。

 
MainActivity.java

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

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

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

 
リソースです
strings.xml

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

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

 
関連ページ:

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

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

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




アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう、時間の制約がないところが一番の魅力です。

以下の3つはAndroidが学習できるオンラインスクールです。


TECH ACADEMY
Androidアプリコース



侍エンジニア塾
侍エンジニア塾 無料体験レッスン



CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp





正直ネットや本では限界があります。直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。

尚、スクールがダメだと言う人がいますが、やる気があれば問題ありません。与えられるのを待っていてはいけないですね
欲しいものは取りに行くのです。


Google Pixel 3 XLグローバル版
SIMフリー 並行輸入品
6.3インチの大画面
背景をぼかすポートレートモード撮影


Anker PowerCore II Slim 10000
Power IQ 2.0搭載
iPhone & Android対応

シェアする

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

フォローする