每次调用onLocationChanged的秒数是多少? 我想每隔30秒更新用户的位置,我不知道该怎么做。
P.S:我正在使用网络位置提供商,而不是GPS。我知道GPS更准确但我关心电池消耗和室内位置。
这是我每隔一段时间调用自己的方法(我不知道每一个时间到底有多少)..
TextView tvLong,tvLati;
Button btnGet;
private LocationManager locationManager;
private String provider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvLong =(TextView)findViewById(R.id.tvLong);
tvLati = (TextView)findViewById(R.id.tvLati);
btnGet = (Button)findViewById(R.id.btnGet);
btnGet.setOnClickListener(this);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
// Initialize the location fields
if (location != null) {
System.out.println("Provider " + provider + " has been selected.");
onLocationChanged(location);
} else {
tvLati.setText("Location not available");
tvLong.setText("Location not available");
}
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this); // I dont know what this exactly DOES.
}
public void onLocationChanged(Location location) {
lat = (location.getLatitude());
lng = (location.getLongitude());
String valueLati = "Latitude: " + lat;
String valueLong = "Longitude: " + lng;
tvLati.setText(valueLati);
tvLong.setText(valueLong);
}
答案 0 :(得分:1)
选项1
如果您需要致电onLocationChanged
,请不要使用requestLocationUpdates
,因为API在自定义Android手机(三星)上完全不可靠。最好使用AlarmManager并拨打getLastKnownLocation
,然后自己致电onLocationChanged
。
另请注意,getLastKnowLocation在三星手机上有问题,因此您需要触发 api才能在场景后面进行更新,然后才能让它返回一个好的位置。
在getLastKnownLocation之前调用它,这是一个黑客。
注意:这对您的应用程序没有任何作用,只是触发后端缓存以获得良好的上一个已知位置。
HomeScreen.getLocationManager().requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 0, 0, new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onLocationChanged(final Location location) {
}
});
选项2
全部垃圾,并使用新的LocationClient
API。它也有一个getLastLocation kinda API,你可以使用AlarmManager。使用LocationClient,您无需为最佳提供商,可用提供商,精度选择和传感器而烦恼。 LocationClient将它们全部合并为一个不错的API。
适用于警报管理器
我在经历了一些痛苦之后才开始工作。所以,link。