【问题标题】:Trouble getting location data using LTE rather than WiFi无法使用 LTE 而不是 WiFi 获取位置数据
【发布时间】:2015-02-10 22:47:21
【问题描述】:

我正在尝试在使用 4G/LTE 时获取设备的纬度/经度。下面的代码在使用 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);
        }

    }

【问题讨论】:

  • 我不确定,但 networkType.equals("WiFi") 不是导致问题的原因吗?什么是网络类型?你是怎么得到它的?
  • 我已经添加了用于确定网络类型的方法。我调试了代码以确保它按预期工作,并且确实如此。只是由于某种原因没有收到位置

标签: java android location locationmanager locationlistener


【解决方案1】:

您在 wifi 上使用 NETWORK_PROVIDER,在关闭时使用 GPS。很可能你没有得到 GPS 同步。在室内实际上很难做到。您的通知栏中是否出现闪烁的 GPS 符号?如果是这样,您没有获得完整的 GPS 同步,因此不会调用 onLocationChanged。

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

【讨论】:

  • 感谢您的信息。我会把笔记本电脑拖到屋顶,看看我是否有更好的运气。我看到你提到的闪烁。
  • 当它变得稳定时,你就会知道你有一个同步。或者您可以使用 GpsTest(它是一个免费的应用程序)来获取有关您所在州的更多信息。或者,您可以下载 FakeGPS 之类的应用,并为您的应用启用模拟位置,以便能够向其发送虚假 GPS 坐标。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-18
相关资源
最近更新 更多