每次单击按钮时,我都会使用下面显示的代码来获取位置的更新值。当我的活动恢复时,我每秒都会得到一次更新,所以当我调用getLastKnownLocation时,我希望有一个位置在最后一秒更新。
这是正确的方法吗?
我希望每次执行'geo fix'命令时触发onLocationChanged事件(或者因为我请求每1秒更新一次,所以在1s后最大值),但它只在第一次触发时触发。为什么呢?
欢迎任何帮助/建议!
由于
package org.digitalfarm.atable;
...
public class Atable extends Activity {
private Button mSearchButton;
private TextView mytext;
private LocationManager locationManager;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSearchButton = (Button)this.findViewById(R.id.button);
mytext = (TextView) findViewById(R.id.dude);
locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
final Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
mSearchButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);
}
});
}
//Start a location listener
LocationListener onLocationChange=new LocationListener() {
public void onLocationChanged(Location loc) {
//sets and displays the lat/long when a location is provided
String latlong = "Lat: " + loc.getLatitude() + " Long: " + loc.getLongitude();
mytext.setText(latlong);
}
public void onProviderDisabled(String provider) {
// required for interface, not used
}
public void onProviderEnabled(String provider) {
// required for interface, not used
}
public void onStatusChanged(String provider, int status,
Bundle extras) {
// required for interface, not used
}
};
//pauses listener while app is inactive
@Override
public void onPause() {
super.onPause();
locationManager.removeUpdates(onLocationChange);
}
//reactivates listener when app is resumed
@Override
public void onResume() {
super.onResume();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000,100.0f,onLocationChange);
}
}
答案 0 :(得分:0)
requestLocationUpdates中指定的时间是最短可能的时间间隔,最多可以进行一次更新。因此,您每秒最多注册一次更新,但实际更新可能需要更多的更新,而且,不能保证这一点。
来自文档:
minTime - 通知的最短时间间隔,以毫秒为单位。此字段仅用作节省电量的提示,位置更新之间的实际时间可能比此值更大或更小。
尝试将该时间间隔设置为0,如果没有其他问题(虽然这对我来说似乎都很好),您应该“尽可能频繁地”开始获取更新。