2016-10-17 7 views
-1

私のAndroidアプリケーションでは、同様のアドレスリストと異なる活動をしています&少なくとも10秒間隔で距離を表示(更新)する必要があります。しかし、私は、いつでも実際の現在地への高速アクセスを整理する正しい方法を知らない。AndroidグローバルLocationManagerアクセス​​(シングルトンのようなもの)

私はLocationManagerメソッド現在位置を取得するための活動からApplicationオブジェクト&呼び出し、いくつかの((MyApplication)getApplicationContext()).getCurrentPos()で&ストア現在の座標とスプラッシュ画面の活動をオーバーロードする場合は、この問題を解決するための正しい方法でしょうか? またはメソッドでシングルトン&を初期化する必要がありますか?またはどのように?

+0

を* LocationManagerでアプリケーションクラスをオーバーロードすると、ユーザーの許可を得る場所がわかりません。 ...またbazillion回尋ねた:なぜあなたはサービスを使用しないでください? – Selvin

+0

サービスを作成した場合、アプリケーションがアクティブな場合にのみ必要なので、onStop()/ onResume()のすべてのアクティビティからライフタイムを管理する必要があります。常にサービスを開始したり停止したりするのは複雑すぎるのではないでしょうか? – Green

答えて

0

カスタムシングルトンロケーションマネージャークラスを使用して同じ問題を解決しました。

私のロケーションマネージャはアプリケーションコンテキストでインライン化されており、GoogleApiClientでLocationService APIに必要な実装が含まれています(私はFusedLocation APIを使用しています)。

あなたのスプラッシュでカスタムロケーションマネージャをinicialize場合(あなたはまた、アンドロイド6.0のために必要な権限を処理し、ここで上記のことができます)、このような他の活動の単純な呼び出しコードに現在の位置にアクセスするには:

MyLocationManager.getInstance().getCurrentPos(); 
+0

私が直面した次の問題は、ロケーションマネージャの正しい停止です。私が見つけた1つの解決策は、 'onLocationChanged(Location location)'でリスナを一旦削除して削除し、次に各アクティビティの 'onStop()'メソッドでマネージャを停止することです。あなたの解決策は何でしたか? – Green

+0

私の場合は、アプリケーションが実行されるまでの位置が必要なので、リスナーをスプラッシュに追加し、アプリケーション終了時にリスナーを削除します。しかし、すべてのアクティビティのonStop()でリスナーを削除したい場合は、カスタムシングルトンロケーションマネージャを使用する必要はありません。 – wichnator

+0

「アプリケーションの終了**で削除する」の意味は?これは最も興味深い点です。 – Green