Android ——加速度传感器的简单使用

加速度传感器的简单使用

使用要点:
1.创建一个内部类实现SensorEventListener(或者在本类直接实现)。

 //创建内部类AccelerSensor,实现SensorEventListener
    class AccelerSensor implements SensorEventListener{

        @Override
        public void onSensorChanged(SensorEvent event) {
        }

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

        }
    }

2.获得传感器的对象,并创建内部类AccelerSensor的实例。

 //获得传感器的对象
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        //创建AccelerSensor对象
        accelerSensor = new AccelerSensor();

3.在onResume()方法中注册传感器管理。

//注册传感器管理
        sensorManager.registerListener(accelerSensor,
                sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                sensorManager.SENSOR_DELAY_UI);

4.在onPause()方法中注销传感器管理。

sensorManager.unregisterListener(accelerSensor);

5.编写加速度改变事件。

@Override
        public void onSensorChanged(SensorEvent event) {
            float[] acceler = new float[3];

            for (int i = 0; i < acceler.length; i++) {
                acceler[i] = event.values[i];
            }

            textView.setText("x = "+acceler[0]+" ,y = "+acceler[1]+" ,z = "+acceler[2]);
        }

下面贴出使用源码:
(1)MainActivity.java文件

package com.example.accelerationsensor;


import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity  {
    private SensorManager sensorManager;
    private AccelerSensor accelerSensor;
    private TextView textView;

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


        //获得传感器的对象
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        //创建AccelerSensor对象
        accelerSensor = new AccelerSensor();

        textView=findViewById(R.id.tv_accelerometer);
    }

    @Override
    protected void onResume() {
        super.onResume();

        //注册传感器管理
        if(sensorManager != null){
        	sensorManager.registerListener(accelerSensor,
        	sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
                sensorManager.SENSOR_DELAY_UI);
        }
        
    }

    @Override
    protected void onPause() {
        super.onPause();
        //注销传感器管理
        if(sensorManager != null){
        	 sensorManager.unregisterListener(accelerSensor);
        }
    }



    //创建内部类AccelerSensor,实现SensorEventListener
    class AccelerSensor implements SensorEventListener{

        @Override
        public void onSensorChanged(SensorEvent event) {
            float[] acceler = new float[3];

            for (int i = 0; i < acceler.length; i++) {
                acceler[i] = event.values[i];
            }

            textView.setText("x = "+acceler[0]+" ,y = "+acceler[1]+" ,z = "+acceler[2]);
        }

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

        }
    }

}

(1)activity_main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tv_accelerometer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="null"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
发布了6 篇原创文章 · 获赞 3 · 访问量 2035

猜你喜欢

转载自blog.csdn.net/qq_43567345/article/details/103428303