studio - manual de programacion android pdf
getSystemServices no está definido cuando se lo llama en un Fragmento? (4)
Quiero que TextViews
muestre las lecturas de los sensores en un Fragment
. Al intentar inicializar el SensorManager
getSystemServices
no está definido en el Fragment
, dice eclipse. Por qué y cómo solucionarlo.
Fragmento
public class FragSensors extends Fragment {
private TextView accXTv, accYTv, accZTv;
private SensorManager sensorManager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.frag_sensors, container, false);
accXTv = (TextView) v.findViewById(R.id.accXValue);
accYTv = (TextView) v.findViewById(R.id.accYValue);
accZTv = (TextView) v.findViewById(R.id.accZValue);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
}
private final SensorEventListener mSensorListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
};
}
Solo una llamada más al método:
sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
¿Por qué esa llamada de método extra?
el método getSystemService()
que proporciona acceso a los servicios del sistema proviene de Context
. Una Activity
extiende el Context
, un Fragment
no. Por lo tanto, primero necesita obtener una referencia a la Activity
en la que se encuentra el Fragment
y luego recuperar mágicamente el servicio del sistema que desea.
También puede obtener el contexto del LayoutInflater.
SensorManager sm = (SensorManager) getLayoutInflater().getContext().getSystemService(Context.SENSOR_SERVICE);
Utilizar:
getActivity().getSystemService(name)
sensorManager = (SensorManager) getActivity().getSystemService(Context.NAMEOF_SERVICE);
Los fragmentos no pueden llamar directamente a los Servicios del sistema. Debes usar la Actividad con la que se adjuntan estos fragmentos.