Подтвердить что ты не робот

GetSystemServices undefined при вызове в фрагменте?

Я хочу, чтобы TextViews отображал показания датчиков в Fragment. При попытке инициализации SensorManager getSystemServices есть undefined в Fragment, говорит eclipse. Почему и как его исправить.

Фрагмент

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

    }
};

}

4b9b3361

Ответ 1

Еще один вызов метода:

sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);  

Почему этот дополнительный вызов вызывается?
метод getSystemService(), обеспечивающий доступ к системным службам, поступает из Context. Activity продолжается Context, a Fragment - нет. Следовательно, сначала вам нужно получить ссылку на Activity, в которой содержится Fragment, а затем магически получить требуемую системную услугу.

Ответ 2

Использование:

getActivity().getSystemService(name)

Ответ 3

sensorManager = (SensorManager) getActivity().getSystemService(Context.NAMEOF_SERVICE);

Фрагменты не могут напрямую обращаться к системным службам, вы должны использовать Activity, с которым прикреплен этот фрагмент

Ответ 4

На Kotlin использовать:

this.sensorManager = activity!!.getSystemService(Context.SENSOR_SERVICE) as SensorManager

Ответ 5

Вы также можете получить контекст из LayoutInflater.

SensorManager sm = (SensorManager) getLayoutInflater().getContext().getSystemService(Context.SENSOR_SERVICE);