tutorial studio programacion navegar fragments example entre dinamicos diferencia desde activity abrir android android-fragments android-sensors

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.