Android 删除位置侦听器
我想在打开对话框并单击位置按钮后,检测用户的位置并显示用户的位置,然后用户关闭对话框,位置侦听器从Android 删除位置侦听器,android,dialog,location,Android,Dialog,Location,我想在打开对话框并单击位置按钮后,检测用户的位置并显示用户的位置,然后用户关闭对话框,位置侦听器从onLocationChanged中删除位置而不获取位置,我尝试使用locationManager.removeUpdate(LocationListener)覆盖解除但解除后没有任何机会和位置再次显示!为什么?在显示对话框和检测位置后,如何检测用户的位置?谢谢 编辑: }在新代码中,您应该使用LocationClient,而不是LocationManager。它可以更高效地以最小的能量(电池消耗)
onLocationChanged
中删除位置而不获取位置,我尝试使用locationManager.removeUpdate(LocationListener)
覆盖解除
但解除后没有任何机会和位置再次显示!为什么?在显示对话框和检测位置后,如何检测用户的位置?谢谢
编辑:
}在新代码中,您应该使用
LocationClient
,而不是LocationManager
。它可以更高效地以最小的能量(电池消耗)获得更高的准确度。看这里。建立了LocationClient
后,您可以调用getLastLocation()
,它为您提供最后一个位置,并且不会启动循环位置更新。
如果您想坚持使用
LocationManager
使用requestSingleUpdate(字符串提供程序、LocationListener侦听器、Looper-Looper)
方法仅从中获取一个最新位置。您能发布一些当前代码吗?谢谢。我在我的问题中添加了一些代码。我想得到确切的用户位置,而不是最后一个位置。最后一个位置有时不正确。我的问题是,我想删除更新检测位置,但我不知道如何才能做到这一点。因此,就像我在编辑中写的那样,使用requestSingleUpdate
方法,您将不必删除位置更新。requestSingleUpdate不可用!我应该在GPSLocationListener或DialogTest类中使用它?public void requestSingleUpdate(字符串提供程序、位置侦听器侦听器、循环器循环器)
是LocationManager的一种方法,因此请在代码中使用它而不是requestLocationUpdates
。谢谢。什么是活套?如何填补这个空缺?
public class DialogTest extends Dialog implements
android.view.View.OnClickListener {
Context context;
LocationManager locationManager;
LocationListener locationListener;
Location location;
public DialogTest(Context context) {
super(context);
// TODO Auto-generated constructor stub
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.context = context;
setContentView(R.layout.profile_dialog);
getWindow().setBackgroundDrawableResource(R.drawable.background_dialog);
firstAccessLocation=true;
setCancelable(true);
initialize();
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
findAddress();
}
private void findAddress() {
// if (gpsCheckBox.isChecked()) {
locationManager = (LocationManager) context
.getSystemService(Context.LOCATION_SERVICE);
locationListener = new GPSLocationListener();
locationManager.requestLocationUpdates(locationManager.GPS_PROVIDER, 0,
0, locationListener);
locationManager.requestLocationUpdates(
locationManager.NETWORK_PROVIDER, 0, 0, locationListener);
// }
}
private void stopTracking(){
if(locationManager!=null){
locationManager.removeUpdates(locationListener);
}
}
@Override
public void dismiss() {
// TODO Auto-generated method stub
stopTracking();
gpsTurnOff();
super.dismiss();
}
public class GPSLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
// TODO Auto-generated method stub
if(location!=null)
Log.e("location", location.getLatitude()+"");
location = loc;
if (location != null&& firstAccessLocation) {
setAddress(location.getLatitude(), location.getLongitude());
firstAccessLocation=false;
}
Toast.makeText(context, "changed", Toast.LENGTH_LONG).show();
Log.e("location", "changed");
}
@Override
public void onProviderDisabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
// TODO Auto-generated method stub
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
}