对我而言,它似乎是第一次活动开始时调用,就在onCreate之后,它似乎随机调用,无论我是否移动???
无论如何,如果我在onCreate方法中有这样的代码,它会自动调用吗?
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
Criteria criteria = new Criteria();
是吗???
干杯, 麦克
答案 0 :(得分:26)
您的问题最初并不清楚。您的代码和标题不匹配。我只回答你的头衔。
您必须为您的位置管理器注册位置侦听器,然后将根据您在注册位置侦听器时提供的设置调用onLocationChanged()。
见下面的代码如何做到这一点。我使用GPS提供商,您也可以根据标准使用任何提供商。
LocationManger lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
}
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String provider, int status,
Bundle extras) {
// TODO Auto-generated method stub
}
});
回到你的问题,如果当前位置更新与上一个已知位置不匹配,将调用onLocationChanged()。
更新的位置将在每个minTime(在我的情况下为1000毫秒)中更改,并且如果设备移动minDistance(在我的情况下为0米)距离。
我希望你能理解这一点。
答案 1 :(得分:6)
如果要捕获新位置,则必须注册这样的LocationListener:
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
LocationListener listener = new LocationListener() {
...
}
locationManager.requestLocationUpdates(GPS_PROVIDER, intervall, distance, listener);
使用 intervall 和距离,您可以配置:
注册LocationListener后,LocationManager开始获取您的地理位置并调用onLocationChanged()。如果距离非常低,则可能会在短时间内经常调用该方法。根据 intervall ,LocationManager将在之后休息。
我认为,只有在注册LocationListener时,LocationManager才会开始工作。
希望有帮助...
干杯, 托比
答案 2 :(得分:0)
public void onLocationChanged(Location location)
一旦您的位置发生变化,就会自动调用上述方法。