Android 片段中的LocationManager
我正在尝试将使用Android 片段中的LocationManager,android,android-fragments,android-fragmentactivity,locationlistener,Android,Android Fragments,Android Fragmentactivity,Locationlistener,我正在尝试将使用LocationListener的活动转换为片段,使用LocationManager如下: 受保护的LocationManager LocationManager @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); locationManager = (LocationMan
LocationListener
的活动
转换为片段
,使用LocationManager
如下:
受保护的LocationManager LocationManager
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
locationManager = (LocationManager) getActivity().getSystemService(
Context.LOCATION_SERVICE);
(...)
}
我对这些方法有一些问题(无法消除错误):
如何在片段中使用这些方法?您混淆了实际接收更新的
LocationManager
和LocationListener
之间的关系。例如,指示错误的onLocationChanged实际上是一个回调,您分配给该LocationManager
的LocationListener
使用该回调将新的location对象传递给您的活动/片段。这不是你所谓的你自己
您的LocationListener
和LocationManager
的交互方式是这样的。在你的片段中会有两个的实例onActivityCreated
您可以使用LocationListener
初始化LocationManager
和LocationListener
,实现下面所有必需的回调
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
}
};
您的LocationListner
将在每次locatino更改满足您在创建时指定的任何标准时调用onLocationChanged。查看android文档,了解更多详细信息
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
}
};