如何让Android LocationManager使用手机网络而不是Wifi网络?

如何让Android LocationManager使用手机网络而不是Wifi网络?,android,wifi,cell,locationmanager,Android,Wifi,Cell,Locationmanager,我有一个android应用程序,使用LocationManager获取手机网络位置,而不是Wifi位置?如果我已关闭Wifi天线并执行以下操作: LocationManager lm = (LocationManager) paramContext.getSystemService(Context.LOCATION_SERVICE); Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 我

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

LocationManager lm = (LocationManager) paramContext.getSystemService(Context.LOCATION_SERVICE);
Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
我总是返回Wifi位置,而不是手机网络位置。我希望它返回手机位置,因为我已从Wifi位置移动。我尝试使用LocationListener,但似乎没有帮助

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


谢谢

查看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()。

我不相信您可以

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


如果您只需要手机ID,请查看电话管理器。在那里添加一个。

我不知道您现在是否有答案,但您是否尝试在网络信息上编写一些逻辑并获取您所在的网络类型??然后打一个定位服务电话

 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;
}

Marc-网络提供商包括Wifi提供商和手机提供商,因此我总是能得到Wifi的最后一个位置,这是旧的,手机网络有一个更准确的答案。我想知道如何强制它忘记Wifi位置并使用手机位置。对不起,Tony,我不知道Wifi连接也提供位置信息。但我认为这仍然有效。如果关闭wifi,然后对LocationListener使用requestLocationUpdates(),则应开始获取手机网络提供的位置。如果只使用getLastKnownLocation()而不注册LocationListener进行更新,则它将始终返回可能过时的位置信息。我可能错了,但值得一试。我正试图做完全相反的事情,区分wifi和手机。没什么大不了的,但托尼·吉尔遇到托尼·G.所发布的类似问题的情况并不多见。