2015-02-10 50 views
0

我试图在使用4G/LTE时获得设备的纬度/长度。下面的代码在使用WiFi时效果很好,但使用4G/LTE时根本不会调用onLocationChanged方法。任何想法为什么?使用LTE而不是WiFi获取位置数据的问题

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

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

    } 
+0

我不确定,但不是networkType.equals(“WiFi”)导致的问题? 什么是networkType?你如何得到它? – 2015-02-10 22:54:35

+0

我已经添加了用于确定网络类型的方法。我调试了代码以确保它按预期工作,而且是。只是由于某种原因,没有收到位置 – 2015-02-10 23:05:22

回答

1

你在WiFi和GPS关闭时使用时NETWORK_PROVIDER。赔率是你没有得到一个GPS同步。其实在室内很难做到。您在通知栏中是否闪烁GPS符号?如果是这样,你没有得到一个完整的GPS同步,因此onLocationChanged不会被调用。

当使用NETWORK_PROVIDER在无线网络上时,您会得到一个几乎即时的位置,因为NETWORK_PROVIDER不需要卫星,并且几乎总是可用,它只是几乎不准确。

+0

感谢您的信息。我会将笔记本电脑拖到屋顶,看看我是否有更好的运气。我看到你提到的闪烁。 – 2015-02-10 23:17:09

+0

你会知道你有一个同步,当它变得稳定。或者你可以使用GpsTest(它的一个免费的应用程序)来获取你的状态的更多信息。或者,您可以下载像FakeGPS这样的应用程序,并为您的应用程序启用模拟位置,以便能够向其发送伪造的GPS坐标。 – 2015-02-10 23:21:54

相关问题