1

これは、現在の場所を取得するために使用するコードです。

mgr = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
best = mgr.getBestProvider(criteria, true);
if (best == null) {
    //ask user to enable atleast one of the Location Providers
} else {
    Location location = mgr.getLastKnownLocation(best);
//But sometimes it returns null
}

ほぼ毎回best = network

しかし、それは時々場所を提供していません。

mgr.getLastKnownLocation(best) returns null

また:

onResume() {
    mgr.requestLocationUpdates(best, 15000, 10, this);
}

onPause() {
    mgr.removeUpdates(this);
}

そのような場合の代替手段はありますか?

1つのオプションは

List<String> providers = mgr.getAllProviders();

すべてのプロバイダーを保存し、1つずつ実行します。しかし、これが推奨される場所を見たことがありません。さらに、最高のプロバイダーを求めることは、ドキュメントが示唆していることです。

4

1 に答える 1

7

getLastKnownLocation()プロバイダーが最近使用された場合にのみ、プロバイダーのLocationオブジェクトを返します。最近ではない場合、Androidは、そのプロバイダーによって指定された最後の場所が古くて間違っていると見なし、nullを返します。

onLocationChanged()このような場合、使用可能な場所を取得する前に、LocationListenerのメソッドが呼び出されるのを待つ必要があります。

于 2013-03-14T13:08:45.263 に答える