2

誰かが助けてくれたら最高です。そこにあるすべての例のように、Android アプリでポジショニングをセットアップし、GPS プロバイダーとネットワーク プロバイダーの両方にロケーション リスナーを登録しようとしています。

ただし、私のネットワーク プロバイダーは、ネットワーク関連の応答をまったく返しません。つまり、WiFi が有効になっている場合にのみ、応答が返されます。そうでない場合は、常にタイムアウトします。

私のコード:

lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 1, locationListener);
....
public void onLocationChanged(Location location) {
        Log.d(TAG, "onLocationChanged;provider;" + location.getProvider() + ",lon;" + location.getLongitude() + ";lat;" + location.getLatitude() + ";accuracy;" + location.getAccuracy());
        resultHandler.handleLocationResult(location, false);
        lm.removeUpdates(this);

そのため、Wifi がオンになっている場合は応答が非常に速くなりますが、GSM のみがオンになっている場合は何も起こらず、Android の logcat にも何も表示されません。

requestlocationupdates のパラメーターも変更しようとしましたが、違いはありません。

何か他にできることがあれば、ポインタをいただければ幸いです。

編集:もちろん、ネットワークポジショニングを他の方法で試しました。キャリアポジショニング(SMSを使用)を介して動作し、Googleマップで同じセットアップを試みました。マップは位置を取得できると思います。もちろん、私はレセプションを持っています:)

4

1 に答える 1

4

これはほぼ1年前のことですが、同じ問題を検索している他の人にとっては、実際のNETWORK_PROVIDERが別の場所を返すときにのみonLocationChangedが呼び出されるためだと思います。

したがって、この場合、ある種のタイムアウトに達した場合は、キャッシュされたNETWORK_PROVIDERの場所を使用する必要があります。これは、キャッシュされた場所が現在のものである必要があるためです。

すなわち:

Location lastNetworkLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

次に、getTime()とdistanceTo()が妥当かどうかを確認します。

于 2012-10-02T08:14:49.140 に答える