Android:通过移动互联网获取位置(NETWORK_PROVIDER)

时间:2014-12-29 10:58:45

标签: android locationlistener

我正在开发一个应用程序,第一个活动检查网络和Gps,如果至少存在网络,它会尝试获取当前位置(无需特殊准确性)。 在WIFI模式下,一切都很完美。在GPS模式(如果可用)中,一切都很完美。 问题出在移动互联网上(没有WIFI / GPS)。在这种模式下,onLocationChanged方法在位置请求开始后给我一些坐标。准确性非常糟糕。问题是我无法找到WIFI和MOBILE互联网之间的区别。

..代码

private void startLocationListeners(){
    try
    {
        if (isNetworkEnabled)
        {
            if (isGPSEnabled)
            {
                locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0, locationListener);
                Log.d("TAG", "GPS");
                }

            else{
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0,0, locationListener);
                Log.d("TAG", "Network"); 
                }
            }
        }

    catch (Exception e)
        {
        Log.e("Error TAG : LocationManager", "problem", e);
        }
}

..这里是onLocationchanged

public void onLocationChanged(Location location) {
            stopLocationListeners();
            coordinates=String.valueOf(location.getLatitude())+","+String.valueOf(location.getLongitude());
            Toast.makeText(context, coordinates, Toast.LENGTH_SHORT).show();
            startCamera();
            }
    };

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你真的要关闭wifi来做你的测试吗?如果是这样,这正是预期的行为。

网络位置查找的工作原理是向互联网发送请求说“我可以看到以下wifi网络和手机信号塔,你能告诉我我在哪里吗?"当wifi打开时你有很多网络,而且因为wifi是一个短程信号,你可以很好地了解它的位置。如果你关闭wifi,那么你所拥有的就是手机信号塔的位置,而且它们相距甚远,因此精确度会下降。