【Android入门到项目实战-- 9.3】—— 加速度传感器的详细使用教程

基础知识

         加速度传感器可以返回x、y、z三轴的加速度数值,该数值受地心引力的影响。

        将手机平放桌面上,x、y、z轴默认为9.81;手机向下z轴为-9.81。

        将手机向左倾斜,x轴为正,向右倾斜,x为负;

         将手机向上倾斜,y轴为负,向下倾斜,x为正。

如下图上到下依次为xyz轴数值,可知手机状态是向右倾斜的。

实践使用

新建项目,修改布局文件activity_main.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textViewx"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textViewy"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textViewz"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

修改MainActivity代码如下:

public class MainActivity extends AppCompatActivity implements SensorEventListener {
    private SensorManager sm;
    TextView textViewx;
    TextView textViewy;
    TextView textViewz;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textViewx = (TextView) findViewById(R.id.textViewx);
        textViewy = (TextView) findViewById(R.id.textViewy);
        textViewz = (TextView) findViewById(R.id.textViewz);

//        获取传感器管理器
        sm = (SensorManager) getSystemService(SENSOR_SERVICE);
//        调用方法获取需要的传感器
        Sensor mSensorOrientation = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
//        注册监听器
//SENSOR_DELAY_FASTEST最灵敏

//SENSOR_DELAY_GAME 游戏的时候,不过一般用这个就够了

//SENSOR_DELAY_NORMAL 比较慢。

//SENSOR_DELAY_UI 最慢的
        sm.registerListener(this, mSensorOrientation, android.hardware.SensorManager.SENSOR_DELAY_UI);

    }
//      该方法在传感器的值发生变化的时候调用
    @Override
    public void onSensorChanged(SensorEvent event) {
        float X = event.values[0];
        float Y = event.values[1];
        float Z = event.values[2];
        textViewx.setText(X+"");
        textViewy.setText(Y+"");
        textViewz.setText(Z+"");
    }
//    当传感器的进度发生改变时回调,sensor是传感器对象,accuracy是传感器新的精度
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
//  在activity变为不可见的时候,传感器依然在工作,这样很耗电,所以我们根据需求可以在onPause方法里面停掉传感器的工作
    @Override
    public void onPause() {
//        取消监听器的注册
        sm. unregisterListener(this);
        super.onPause();
    }
}

在手机上运行你会发现三个数值小数部分一直在变化,这是正常的。

猜你喜欢

转载自blog.csdn.net/Tir_zhang/article/details/130543722
9.3