3

我有一个使用 LocationManager 获取手机网络位置而不是 Wifi 位置的 android 应用程序?如果我关闭了 Wifi 天线并执行以下操作:

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

我总是返回 Wifi 位置,而不是蜂窝网络位置。我希望它返回小区位置,因为我已经从 Wifi 位置移动了。我尝试使用 LocationListener 但这似乎没有帮助。

这是在运行 Froyo 的 HTC Evo 上运行的。

谢谢!

4

3 回答 3

1

我不相信你可以。

网络位置提供商查看 wifi 状态和小区状态,如果太旧则丢弃其中一个,或者通过 MASF 服务器将它们都发送到 Google 位置服务器 (GLS)。那里的所作所为很神奇。但是您可以查看 NetworkProvider 的实现并了解如何调整您的代码。代码在这里:NetworkLocationProvider

如果您只需要单元 ID,请查看 Telephony Manager。在那里添加一个PhoneStateListener

于 2011-04-20T15:16:17.263 回答
0

查看 Android 开发指南中的此部分:请求位置更新。基本上,您需要注册一个侦听器以获取位置更新,然后告诉 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 回答