【发布时间】:2011-04-05 00:41:30
【问题描述】:
我正在开发应用程序,该应用程序必须获取纬度和经度。就我而言,requestLocationUpdates (String provider, long minTime, float minDistance, LocationListener listener) 不在选项中。为什么?因为我必须在用户执行需要该位置的操作时才获得位置(假设他按下按钮)。当按下按钮时,我需要准确的时间位置。在requestLocationUpdates 中,我们可以设置 minTime-如果我设置了这个让我们说在 30000 上,“按钮点击时间”的位置不会像我想要的那样好。同样的原因 minDistance 也没有我想要的那么好。如果我理解函数 requestLocationUpdates 正确 - 当 minTime 和 minDistance 设置为 0 时,位置一直在更新。如果我错了,请纠正我。应用程序适用于我正在工作的公司,该应用程序将在白天和晚上使用。所以如果应用程序会一直检查位置更新,电池通常会是空的。这就是为什么我当时需要位置,那个按钮被按下了。用户无法访问互联网和 gps。所以我必须使用NETWORK_PROVIDER
重启设备后我也遇到了定位问题。在我运行谷歌地图之前它不起作用。用户也不会使用这个,那么android上的谷歌地图在重启后使用什么功能来获取位置?
目前我使用此代码:
LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener mlocListener = new MyLocationListener();
mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, mlocListener);
mlocManager.removeUpdates(mlocListener);
public class MyLocationListener implements LocationListener{
@Override
public void onLocationChanged(Location loc){
latitude=loc.getLatitude();
longitude=loc.getLongitude();
Text = "My current location is: \n" + "Latitud = " + loc.getLatitude() + "\nLongitud = " + loc.getLongitude();
Toast.makeText( getApplicationContext(),Text,Toast.LENGTH_SHORT).show();
}
@Override
public void onProviderDisabled(String provider){}
@Override
public void onProviderEnabled(String provider){}
@Override
public void onStatusChanged(String provider, int status, Bundle extras){}
}
代码来自here
但此代码无法正常工作。如果我按下“获取位置按钮”,则会显示 Toast 并且位置正确。但是如果我按下按钮几次,它什么也不做。 - 但是 5 分钟后,吐司显示了数百次……这是为什么呢?
【问题讨论】:
-
我测试并注意到设备需要 45s-90s 才能与网络提供商连接并获取纬度和经度。所以我解决了第二个问题......
标签: android geolocation