位于片段内的LocationManager

时间:2013-12-03 13:11:50

标签: android android-fragments android-fragmentactivity locationlistener

我正在尝试将使用Activity的{​​{1}}转换为LocationListener,使用Fragment,如下所示:

受保护的LocationManager locationManager;

LocationManager

我在使用这些方法时遇到了一些问题(无法摆脱错误):

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    locationManager = (LocationManager) getActivity().getSystemService(
                Context.LOCATION_SERVICE);
(...)
}

如何在片段中使用这些方法?

1 个答案:

答案 0 :(得分:2)

您混淆了实际接收更新的LocationManagerLocationListener之间的关系。例如,onLocationChanged(指示错误)实际上是一个回调,您分配给LocationListener的{​​{1}}用于将新的位置对象传递给您的活动/片段。这不是你称之为自己的东西。

LocationManagerLocationListener的互动方式就是这样。你的片段中有两个实例。 LocationManager您将onActivityCreatedLocationManager同时使用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。有关详细信息,请查看LocationManagerLocationListener的Android文档。