我正在尝试将使用Activity
的{{1}}转换为LocationListener
,使用Fragment
,如下所示:
受保护的LocationManager locationManager;
LocationManager
我在使用这些方法时遇到了一些问题(无法摆脱错误):
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
locationManager = (LocationManager) getActivity().getSystemService(
Context.LOCATION_SERVICE);
(...)
}
如何在片段中使用这些方法?
答案 0 :(得分:2)
您混淆了实际接收更新的LocationManager
和LocationListener
之间的关系。例如,onLocationChanged(指示错误)实际上是一个回调,您分配给LocationListener
的{{1}}用于将新的位置对象传递给您的活动/片段。这不是你称之为自己的东西。
LocationManager
和LocationListener
的互动方式就是这样。你的片段中有两个实例。 LocationManager
您将onActivityCreated
和LocationManager
同时使用LocationListener
启动以下所有必需的回调。
LocationListener
每次locatino更改符合您在创建时指定的任何标准时,您的 locationListener = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
GeoPoint userLoc = processNewLocation(location);
if(userLoc != null){
Log.d("USERLOC", userLoc.toString());
//do something with the location
}
}
@Override
public void onProviderDisabled(String provider) {
locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
} else {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
}
@Override
public void onProviderEnabled(String provider) {
locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);
} else {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
};
将调用onLocationChanged。有关详细信息,请查看LocationManager和LocationListener的Android文档。