初めまして。
入社二年目の中国人の謝です。
テクノロジストに所属しており、
主にAndroidアプリ、サイトなどの開発を担当しており、
最近はソーシャルゲームの苦戦をしております。
日本語がおかしいところもいっぱいあると思いますが、指摘していただければ幸いです。
今日は自作のAndroidアプリで積んだ経験を紹介したいと思います。
まずアプリの機能を簡単で紹介したいと思います。
一言といえば、場所、時間より音声モード、Wifi、BTを自動的に切替えてくれるアプリです。
ポイントは
1、バックグランドで安定的に実行できること
2、正確な場所をゲットする
3、電池消費を抑えること
僕も完璧に解決できていないと思いますが、恥ずかしながら自分の方法(正しいのかなぁ)を紹介したいと思います。
1、バックグランドで安定的に実行できること
アンドロイドの経験者ならすぐわかると思いますが、サービスで対応すれば解決できるでしょう。
僕も最初簡単だと思ってましたが、大変だった。
もっとも苦労したのは、「定期的に」GPS情報を取得することです。
定期的といえばタイマーはもっとも使われていますが、
このアプリでは使い物になりません。
アンドロイドは自動的にメモリを解放する仕組みになっている。
そして、端末のメモリ状況より、タイマーも解放されてしまうのです。
しかもいつ解放されたのか、全くわかりません。
自分の知っている限り、唯一の解決方法は「AlarmManager」を使うことです。
メモリいっぱいになっても、
電力が足りなくても、
端末はスリープになっても、
端末が死ぬまでAlarmManagerはちゃんと働きます。
2、正確の場所をゲットする
3、電池消費を抑えること
みなさんご存知だと思いますが、GPS情報取得するのはバッテリー消費がめちゃめちゃ激しいです。
普通にGoogleマップを3時間連続使って、耐えられる端末おそらくまたないでしょう。
アンドロイドは2種類のGPS情報を取得できます。
1、LocationManager.GPS_PROVIDER 衛星GPS情報取得
2、LocationManager.NETWORK_PROVIDER ネットワークGPS情報取得
衛星GPSのメリット
1、比較的に正確なGPS情報取得できます。
→自分の経験だと誤差20メートル以内。
Googleマップと同じレベルのGPS情報取得できないようです。
GoogleはGPS情報悪用されないために、わざと精度を下げたようです。
2、携帯の電波に依存しない
→登山アプリなど
衛星GPSのデメリット
1、バッテリーの消費は激しい
2、屋内はほとんど取得できません
ネットワークGPSのメリット
1、バッテリーに優しい。
→2分一回携帯回線GPSを取得しても、電池消費ほとんど変わりません。
2、屋内も取得可能
→絶対とは言えないですが、基本的には問題ないです。
※取得できない高級ビルもあるらしい。(原因不明、ご存知の方がご教授ください!)
ネットワークGPSのデメリット
1、ざっくりとしたGPS情報しか取得できません
→地域により誤差も大きいです。
僕が住んでいるところだと、誤差は70メートルがありますが、
いろいろなところで試しましたが、遠くなっても150メートルぐらいです。
ほかのユーザからのフィードバックよると、5KM以上もあるらしい。(端末のせいかなぁ...)
実装する際、まず衛星GPS情報取得してみて、10秒間取得できなかったら、ネットワークGPS情報を取得して、
それでも取得できなかったら、getLastKnownLocation(最後取得したGPS情報)を使うっという組み合わせでもいいかもしれません。
補足ですが、ネットワークGPS情報も2種類があります。
1、Wifi
2、基地局
Wifiに接続している場合は、もっとも正確なGPS情報取得することができます。
※WifiでGPS情報取得するのもバッテリーにすごく優しいですが、WifiOnにするだけで、パッテリーを食ってしまうのです。
以上、ご参考になれば幸いです。