无法使用LTE而不是WiFi获取位置数据

时间:2015-02-10 22:47:22

标签: java android location locationmanager locationlistener

我正在尝试使用4G / LTE时获取设备的Lat / Long。使用WiFi时,下面的代码效果很好,但使用4G / LTE时根本不会调用onLocationChanged方法。知道为什么吗?

我只有一个有限的窗口来获取位置坐标,因为它们需要在开头附加到审核日志中。

LTE / 4G通常需要比WiFi更长的时间来确定纬度/经度吗?

lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);



if (networkType.equals("WiFi")) {
    lp = LocationManager.NETWORK_PROVIDER;
}
else {
    lp = LocationManager.GPS_PROVIDER;
}


locationListener = new LocationListener() {
     public void onLocationChanged(Location location) {
          // Called when a new location is found by the network location provider.
         gpsTestLocation = locationStringFromLocation(location);
         System.out.println("mcsoutput location: " + gpsTestLocation);
        }

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


    }

    @Override
    public void onProviderEnabled(String provider) {


    }

    @Override
    public void onProviderDisabled(String provider) {


    }
    };

    // Register the listener with the Location Manager to receive location updates
    lm.requestLocationUpdates(lp, 0, 0, locationListener);

网络类型由:

计算出来
private String checkNetworkState() {
        ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
        NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
    //  NetworkInfo mEthernet = connManager.getNetworkInfo(ConnectivityManager.TYPE_ETHERNET);
        NetworkInfo m3G = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
        TelephonyManager telephonyService = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);


        if (mWifi!=null) isOnWifi = mWifi.isConnected();
        if (m3G!=null) is3G = m3G.isConnected();

        if(isOnWifi == true) {
            return "WiFi";
        }
        else {
            int cellType = telephonyService.getNetworkType();
            return isConnectionFast(cellType);
        }

    }

1 个答案:

答案 0 :(得分:1)

您在关机时使用NETWORK_PROVIDER和关机时使用GPS。赔率是你没有获得GPS同步。在室内时其实很难做到。您是否在通知栏中显示闪烁的GPS符号?如果是这样,您就无法获得完整的GPS同步,因此无法调用onLocationChanged。

当使用NETWORK_PROVIDER在wifi上时,您将获得一个几乎即时的位置,因为NETWORK_PROVIDER不需要卫星并且几乎总是可用,它几乎不准确。