0

私はCriteriaオブジェクトを使用して、そのような最高のプロバイダーを取得しています

final boolean isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
if(isGpsEnabled) {
      Criteria crit = new Criteria();
      crit.setAccuracy(Criteria.ACCURACY_FINE);
      crit.setCostAllowed(true);
      crit.setPowerRequirement(Criteria.NO_REQUIREMENT);
      crit.setSpeedRequirement(false);
      String provider = locationManager.getBestProvider(criteria, true);
      locationManager.requestLocationUpdates(provider, 600000, 0, new myLocationListener());
}

私の携帯電話(Android 4.1)では、[GPS衛星を使用する]オプションと[ワイヤレスネットワークを使用する]オプションの両方が有効になっています。さて、上記のコードは私が屋外にいるときにうまく機能し、GPSの位置を教えてくれます。

しかし、私が屋内にいるときは、「ネットワーク」プロバイダーに戻りません。GPS経由で位置情報を取得しようとし続け、取得することはありません(1分ほど待ちます)

Criteria.ACCURACY_COARSEを使用するようにCriteriaのコードを変更すると、「ネットワーク」プロバイダーが使用されます。

最初にGPSを試してみるにはどうすればよいですか(有効になっているため)。屋内にいるため、衛星に接続して「ネットワーク」の使用にフォールバックすることはできません。私はそれを簡単に機能させることができません。もう一度言いますが、GPSは有効になっていますが、衛星にアクセスできないため、代わりにネットワークの位置を取得する必要があります。

ありがとう。

4

1 に答える 1

1

解決策は、ロケーション マネージャーを作成し、2 つのリスナーをアタッチして更新を受信することでした。1 つは GPS 用、もう 1 つは NETWORK 用です。更新をかなり迅速に受信するように設定します (または、場合によっては、場所を取得する必要がありました)。次に、GPS とネットワークの場所を比較し、どちらがより正確かを見つけるメソッドを作成します。どれが最も正確な位置を返しているかを平均して取得するために、これを最大 3 回実行してから、位置の更新を停止します。

于 2013-01-21T07:10:35.457 に答える