NETWORK_PROVIDDER を使用して現在の場所を取得することにほとんど問題はありません。
私のコードは次のようになります。
LocationManager lMgr = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
boolean isNetworkProviderEnabled = lMgr
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Location location = lMgr.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
// deal somehow with last (very likely outdated location)
}
if (isNetworkProviderEnabled) {
lMgr.requestLocationUpdates(provider, 0, 0, locationListener);
}
もちろん、場所の変更を処理する MyLocationListener があり、必要なすべての権限がマニフェストに追加されています
そして問題は、一部の電話ではこのコードが魅力的に機能することですが、別の電話では「requestLocationUpdates」はまったく何もしません。もちろん、問題のある携帯電話では、Google マップ アプリケーションを開くと、現在地がすぐに表示されます。だから私の質問は(Googleの人々がこれに答えるべきだと私は信じています):Googleマップが現在の場所をすぐに取得し、他のアプリはそうしないのはどのように行われるのですか?私のコードは間違っていますか?もちろん、多くのスタックオーバーフローの質問でこのようなコードを見てきました。誰かが知りたい場合は、この種の問題が一部の Samsung Galaxy Nexus S スマートフォンに表示されます
私のアプリケーションでは、バッテリの電力を節約するために GPS は使用されませんが、位置情報サービスは有効になっています。