How do I get a Sensor in a Fragment to start and stop with Button click?

Viewed 33

First post, feeling a bit like calling on the gods in ancient times. Please be kind dear celestial programming entities, I don't want to sacrifice my cat :(

Problem: trying to implement a Step Counter in a Fragment that starts and stops depending on switch position, but I fail to understand which SensorEventListener-context I need to pass to the registerListener() method that I try to implement in the onCheckedChanged()-method. I tried this, getContext(), getApplication() but to no avail.

So, great oracles of stackoverflow, which are the right words to type?

public class StepCounterFragment extends Fragment implements SensorEventListener {

    //declare layout elements
    private SwitchMaterial switchMaterial;
    private TextView setSteps;
    private Button reset;

    //declare sensor elements
    private Sensor sensorStepCounter;
    private SensorManager sensorManager;

    public StepCounterFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        //implement layout elements
        View rootView = inflater.inflate(R.layout.fragment_step_counter, container, false);
        switchMaterial = rootView.findViewById(R.id.switch_stepCounter);
        setSteps = rootView.findViewById(R.id.tv_stepcount);
        reset = rootView.findViewById(R.id.btn_resetSteps);

        //implement sensor elements
        sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
        sensorStepCounter = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);

        switchMaterial.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    if (sensorStepCounter != null) {
                        sensorManager.registerListener(getContext(), sensorStepCounter, SensorManager.SENSOR_DELAY_NORMAL);
                    }

                } else {

                }
            }
        });

        return rootView;
    }

    @Override
    public void onSensorChanged(SensorEvent event) {

    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {

    }
}
0 Answers
Related