我想实现一个LocationListener
。检查了一些教程,发现了这个:
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
makeUseOfNewLocation(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
但事件监听器是否真的添加在onCreate
方法中?对我来说看起来很乱。将它们添加到单独的类并在onCreate
中创建该类的实例更常见吗?我想知道这里的最佳做法。
谢谢!
答案 0 :(得分:1)
这实际上取决于你想要的应用程序。 所以首先我同意在onCreate()中看起来很混乱。 假设你写了一个小的init()方法并从你的onCreate()调用它,还没有真正改变。 你唯一要注意的是Activity LifeCycle。 如果您没有屏幕焦点,注册接收位置更新而不是您的活动可能会获得更新。 另一种选择是将寄存器移动到onResume(),但是你需要在onPause()中取消注册。如果您的应用当前在屏幕上,则只会获得更新。
答案 1 :(得分:1)
您的方法几乎是正确的但是一步一步,没有“好”的理由在分离的类中实现LocationListener
,但您应该使用LocationListener
方法实现onCreate()
并且< / p>
requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
通常在onResume()
方法和removeUpdates()
方法onDestroy()
中调用。
我建议您通过 CommonsWare 检查WeatherPlus
申请,我认为一切都会更清楚。