3

LocationManagerを使用するAndroidアプリケーションで、Wifiの場所ではなくセルネットワークの場所を取得していますか?Wifiアンテナをオフにして、次のことを行った場合:

LocationManager lm = (LocationManager) paramContext.getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

セルネットワークの場所ではなく、常にWifiの場所が返されます。Wifiの場所から移動したので、セルの場所を返したいです。LocationListenerを使用してみましたが、役に立たないようです。

これは、Froyoを実行しているHTCEvoで実行されています。

ありがとう!

4

3 に答える 3

1

私はあなたができるとは思わない。

ネットワーク ロケーション プロバイダーは、wifi の状態とセルの状態を確認し、古すぎる場合は破棄するか、両方を MASF サーバー経由で Google Location Server (GLS) に送信します。そこで行われるのは魔法です。しかし、NetworkProvider の実装を見て、コードを微調整する方法を確認できます。コードはここにあります: NetworkLocationProvider .

セル ID だけが必要な場合は、Telephony Manager を調べてください。そこにPhoneStateListenerを追加します。

于 2011-04-20T15:16:17.263 に答える
0

Android Dev Guide:RequestingLocationUpdatesのこのセクションを確認してください。基本的に、位置情報の更新を取得するにはリスナーを登録する必要があります。次に、ネットワーク位置情報プロバイダーでそれらの更新を取得することをAndroidに通知します。

// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      // Called when a new location is found by the network location provider.
      makeUseOfNewLocation(location);
    }

    public void onStatusChanged(String provider, int status, Bundle extras) {}

    public void onProviderEnabled(String provider) {}

    public void onProviderDisabled(String provider) {}
  };

// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);

これで、getLastKnownLocation()を使用して最後の既知の場所を取得したり、LocationListenerでonLocationChanged()を使用したりできるようになります。

于 2010-10-19T16:23:17.747 に答える
0

あなたが今までに答えを持っているかどうかはわかりませんが、ネットワーク情報にいくつかのロジックを書き、あなたがいるネットワークのタイプを取得しようとしましたか?? 位置情報サービスの呼び出しを行います。

 public boolean haveNetworkConnection()
{
    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();
    for (NetworkInfo ni : netInfo)
    {
        if (ni.getTypeName().equalsIgnoreCase("WIFI"))
            if (ni.isConnected())
                haveConnectedWifi = true;
        if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
            if (ni.isConnected())
                haveConnectedMobile = true;
    }
    return haveConnectedWifi || haveConnectedMobile;
}
于 2014-11-25T09:30:03.093 に答える