java - fragment 上的传感器管理器(如果可见则添加;如果不可见则删除)

标签 java android android-activity fragment sensormanager

我想在 fragment 上有一个传感器管理器,它仅在 fragment 处于 Activity 状态时才处于 Activity 状态。如果用户更改 fragment ,则应删除监听器。

添加和删除监听器非常简单。当 fragment 出现/消失时,我不知道 fragment 端有任何监听器/函数。还有一个问题是,在几乎所有函数上,this.getActivity() 返回一个空指针。

最佳答案

这就是我的解决方案。我试图把它从我的 fragment 中剪掉。如果有任何错误/语法问题,请告诉我。

public class MyFragment extends Fragment implements SensorEventListener {
    private SensorManager mSensorManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mSensorManager = (SensorManager) this.getActivity().getSystemService(Activity.SENSOR_SERVICE);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.mylayout, container, false);

        return rootView;
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        float x = event.values[0], y = event.values[1];
    }

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

    @Override
    public void setMenuVisibility(boolean menuVisible) {
        super.setMenuVisibility(menuVisible);

        // First starts (gets called before everything else)
        if(mSensorManager == null) {
            return;
        }

        if(menuVisible) {
            this.registerSensorListener();
        } else {
            this.unregisterSensorListener();
        }   
    }

    @Override
    public void onStart() {
        super.onStart();

        if(this.getUserVisibleHint()) {
            this.registerSensorListener();
        }
    }

    @Override
    public void onStop() {
        super.onStop();
        this.unregisterSensorListener();
    }

    private void registerSensorListener() {
        mSensorManager.registerListener(this, mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0), SensorManager.SENSOR_DELAY_FASTEST);
    }

    private void unregisterSensorListener() {
        mSensorManager.unregisterListener(this);
    }
}

关于java - fragment 上的传感器管理器(如果可见则添加;如果不可见则删除),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19047547/

相关文章:

java - 如何获取数组的索引

java - 在 HDP 2.0 上运行 hadoop map reduce java 程序时出错

java - 更改 Swarm Connect 的排行榜功能

安卓动画兼容性

Android AppBarLayout 将 ViewPager 下推

android 在所有 Activity 前保持一个 View

java - 哪个更好?使用相应类数组的原始类型数组

android - 我尝试从 YUV 图像创建位图,但图像看起来失真(有绿色和粉红色叠加层)

android - "W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@eb23963"是什么意思?

java - Android - 使 Activity 根据点击的内容显示不同的内容