我有一个获取用户位置的应用。我在oncreate()中注册了locationManager和listener。我已分别请求并删除onResume()和onPause()中的更新。应用程序找到位置并在onLocationChanged的loc对象上调用getTime(),这是获取外部时间,然后比较系统时间。此时间在applicationObject中设置,以便在应用程序范围内可用。一切正常,我从applicationObject time setter方法向用户致敬。
我发现的是,当我通过修复用户的位置找到时间,并且我转到下一个活动时,应用程序继续获得另外20秒的时间,有时甚至更多。
当我在第一个活动的onPause()方法中取消注册locaction侦听器时,这怎么可能?
@Override
protected void onPause() {
mlocManager.removeUpdates(mlocListener);
super.onPause();
}
@Override
protected void onResume() {
mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, mlocListener);
super.onResume();
}
private class MyLocationListener implements LocationListener {
@Override
public void onLocationChanged(Location loc) {
Log.e(TAG, "external time = " + loc.getTime());
DateTime dt = new DateTime(loc.getTime());
DateTimeFormatter df3 = DateTimeFormat.forPattern("yyyy-MM-dd H:mm:ss.SSS");
String formattedNowTime3 = df3.print(dt);
Log.e(TAG, "formatted ext time = " + formattedNowTime3);
nfcscannerapplication.setExternalTime(dt);
}
@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
}
}//end of MyLocationListener
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.entryscreen);
mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
mlocListener = new MyLocationListener();
答案 0 :(得分:1)
只有在新活动开始后才能调用onPause()
。
如果您只想要一个onLocationChange()
,则可以使用requestSingleUpdate()
,问题就不复存在了。
问候。
答案 1 :(得分:0)
在removeUpdates();
之后将mlocListener设置为null