Android学习之重力传感器使用

一、食用解读

Android学习之重力传感器使用_第1张图片

注意了Values[0]传回来的数是-10到10,可以根据自己的实际需求进行缩放

Android学习之重力传感器使用_第2张图片

Android学习之重力传感器使用_第3张图片

二、代码示例

Android学习之重力传感器使用_第4张图片

例子,形如此类的。。

public class control extends MainActivity {//注意,这个类是继承MainActivity的!!!

    private static final String TAG = "control";

    ProgressBar progressBarSpeed;
    CheckBox checkBoxGravity;
    SensorManager sensorManager;
    Sensor sensor;
    float X_lateral;//X方向角度
    int Speed=0;//速度
    TextView textViewSpeed;//显示速度值

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.control);

        checkBoxGravity = (CheckBox) findViewById(R.id.checkBox31);
        progressBarSpeed = (ProgressBar) findViewById(R.id.progressBar31);
        textViewSpeed = (TextView) findViewById(R.id.textView33);
        checkBoxGravity.setOnCheckedChangeListener(checkBoxGravityCheckedChangeListener);

    }

    /***
     * 单选框事件
     */
    private CompoundButton.OnCheckedChangeListener checkBoxGravityCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            // TODO Auto-generated method stub
            if (isChecked)
            {
                sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);//获取手机里面的传感器
                sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//选择获取重力传感器
                //监听函数                        重力传感器对象              工作频率
                sensorManager.registerListener(mySensorEventListener, sensor,  SensorManager.SENSOR_DELAY_NORMAL);// SENSOR_DELAY_GAME
            }
            else
            {
                sensorManager.unregisterListener(mySensorEventListener);//释放传感器
            }
        }
    };

    /**
     * 重力传感器监听事件
     */
    SensorEventListener mySensorEventListener = new SensorEventListener() {

        @Override
        public void onSensorChanged(SensorEvent event) {
            // TODO Auto-generated method stub
            if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
            {
                X_lateral = event.values[0]+10; //把-10到10的数据变为0-20
                Speed = (int)((100-(X_lateral*10/2))*2);//变为0-200
                if (Speed>100) {
                    Speed = 100;
                }
                textViewSpeed.setText(String.valueOf(Speed));

                runOnUiThread(new Runnable() {
                    public void run()
                    {
                        progressBarSpeed.setProgress(Speed);
                    }
                });

//                Log.e(TAG, event.values[0]+"" );
            }
            else {
                sensorManager.unregisterListener(mySensorEventListener);
                runOnUiThread(new Runnable() {
                    public void run() {
                        checkBoxGravity.setChecked(false);
                        Toast.makeText(getApplicationContext(), "传感器不存在!!!", Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            // TODO Auto-generated method stub

        }
    };

    protected void onPause() {
        super.onPause();
        sensorManager.unregisterListener(mySensorEventListener);
    }
}

参考:

https://www.cnblogs.com/yangfengwu/p/7633980.html
https://blog.csdn.net/wll995806658/article/details/53993356

你可能感兴趣的:(#,Android学习)