我正在研究app,它必须获得经度和经度。在我的情况下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分钟后Toast显示了几百次......为什么会这样?
答案 0 :(得分:0)
您在requestLocationUpdates之后立即调用removeUpdates。所以,听众从未注册过。在onLocationChanged方法中调用removeUpdates。