2017-05-14 19 views
1

GPSを使って頻繁に位置を確認する必要のあるアプリを書いています。現在の場所を10〜15秒ごとに取得し、それをデータベースに書き込む必要があります(データベース部分は、この質問にはほとんど関係なく、ただそこに投げたいと思っています)。私が直面している問題は、これを達成するためのまともな方法を見つけることができないということです。私はいくつか試してみました:コードネームワンで頻繁なバックグラウンドGPSアップデートを取得するにはどうすればよいですか?

  1. LocationManager.getBackgroundLocationListener()を使用することは決してありません。私はAndroidとiOSの両方で試してみましたが、何も起こっていないようです。私が間違ってやっているかもしれないが、関係なく、私はiOSでそれを読んだ。別のセルタワーに移動するとヒットするだけで、それは自分のニーズを満たしていない。

  2. 私はBackground Fetchを使用しようとしましたが、Androidでは唯一信頼性があります。周波数はiOS上では完全にランダムなので、これも私のニーズを満たしません。

  3. 私は10-15秒ごとに現在の場所を取得する新しいスレッドを開始しようとしましたが、これは画面がオンで、アプリケーションが使用されている場合にのみ機能します。これは私のニーズを満たしません。なぜなら、他のアプリに切り替えるときに位置情報の更新が継続していることを確認する必要があるからです。

この問題を解決する方法はありますか?私はobjective-cの背景を持っていないので、Codename Oneのようなクロスプラットフォームのソリューションは本当に私の唯一のオプションです。

答えて

1

あなたが実際に行っていることをiOSが宣言すると、バックグラウンドフェッチは正しい選択ではありません。あなたがしようとしていることは、iOSでは禁止されていますが、Androidでも問題になる可能性があります。

バックグラウンドで(特にこの解像度で)場所データを取得することは、プライバシーの保護に重大な影響を及ぼします。フォアグラウンドでこれを行うと、ナビゲーションなどのユースケースを許可するうえで問題なく動作しますが、バックグラウンドでは問題になる可能性があります。

このことは、場所とネットワークがバッテリ放電の大きな活動であるという事実によってさらに複雑になります。したがって、これらのAPIで適用できる解像度には限界があります。背景のより一般的な使用例の1つは、ユーザーが重要な興味のあるポイントにいつ近づくかを追跡できるジオフェンシングです。このAPIが存在する理由は、ポーリングコストを削減し、ロケーションの使用を最小限に抑えるためです。

Android & iOSには、バッテリの使用状況を検出するツールが用意されています。これらのツールは、誤動作するアプリに影響する可能性があります。

+0

ありがとう、とても役に立ちました。現時点では、このアプリではiOSが制限的すぎるようです。私はすでにAndroid専用のアプリとしてリリースしているので、今のところそれがそのまま残ると思う。私はCN1が本当に好きです。私がバックグラウンドデータに依存しない別のアプリを書くと、私は将来それを必ず使用します。 –

+0

これらの制限は、コードネーム1にネイティブで無関係であることから明らかです。あなたがアプリで達成しようとしていることを説明するなら、アップルはそのユースケースの回避策を持っている可能性があります。 –

関連する問題