El sensor en Android---sensor de aceleración

Acelerómetro

El sensor de aceleración también se denomina sensor G y devuelve los valores de aceleración de los ejes x, y y z.

Este valor incluye la influencia de la gravedad y la unidad es m/s^2.

Coloque el teléfono sobre la mesa, el eje x está predeterminado en 0, el eje y está predeterminado en 0 y el eje z está predeterminado en 9,81 (debido a la gravedad inherente de la tierra).

Coloque el teléfono boca abajo sobre una mesa con un eje z de -9,81.

Incline el teléfono hacia la izquierda y el eje x será positivo.

Incline el teléfono hacia la derecha y el eje x será negativo.

Inclina el teléfono hacia arriba y el eje y es negativo.

Incline el teléfono hacia abajo y el eje y será positivo.

El tipo de acelerómetro de Android es Sensor.TYPE_ACCELEROMETER

Devuelve el valor del sensor de aceleración a través de android.hardware.SensorEvent.

El sensor de aceleración se usa ampliamente en teléfonos móviles y su proceso de desarrollo también es muy simple (realmente es muy simple obtener el valor. Si desea realizar una determinada función, aún debe pensar en cómo agregarla). juicio.)

Toma una castaña: la función de agitar el teléfono:

Este es un juicio relativamente simple. Después de obtener los valores de x, y y z, juzgue estos tres valores. Si agita el teléfono, estos valores definitivamente cambiarán. Establecemos un umbral. Cuando sus valores exceder un determinado Shake después de un número, es más fácil de entender con la implementación del código

Realización de la función de vibración del teléfono móvil.

@Override
    public void onSensorChanged(SensorEvent event) {
        // 传感器返回的数据
        float x=event.values[0];
        float y=event.values[1];
        float z=event.values[2];
        StringBuffer buffer = new StringBuffer();
        buffer.append("X方向的加速度为:").append(String.format("%.2f", x)).append("\n");
        buffer.append("Y方向的加速度为:").append(String.format("%.2f", y)).append("\n");
        buffer.append("Z方向的加速度为:").append(String.format("%.2f", z)).append("\n");
        if (x>20||y>20||z>20){
            Toast.makeText(AccelerometerActivity.this,"欢迎使用摇一摇",Toast.LENGTH_SHORT).show();
        }
        mTvAccelerometer.setText(buffer);
    }

Como se puede ver en el código anterior, es relativamente sencillo juzgar si el teléfono móvil ha sido sacudido o no cambiando los valores de x, y y z. No importa qué valor exceda 20, se considera que el El teléfono móvil ha sido sacudido, pero se ignora un punto, es decir, el usuario también puede activar el disparador agitando el teléfono móvil en una dirección. Lo mejor es juzgar solo zy, y el xy juzgado debe exceder 20 al mismo tiempo. se puede identificar como temblor, el siguiente es el código modificado

if (x>20&&y>20){
     Toast.makeText(AccelerometerActivity.this,"欢迎使用摇一摇",Toast.LENGTH_SHORT).show();
}

Levanta la mano para encender la pantalla.

También hay una función más complicada que agitar: levantar la mano para iluminar la pantalla. Esto también es para juzgar xyz, así que no pondré el código aquí. Hablemos brevemente de la idea. Cuando levantamos el teléfono, el sensor de aceleración xyz El valor definitivamente cambiará, podemos juzgar su valor final, que es cuál es el valor del sensor cuando el teléfono móvil está frente a nuestra cara (x: 0, y: 8, cuando inclino la cabeza hacia el móvil teléfono, z: 5), podemos juzgar este valor, y si el teléfono móvil alcanza este valor dentro de 200 ms, se considerará que levanta la mano para encender la pantalla

parte del código

El siguiente es el código para obtener el valor del sensor de aceleración y agitar el teléfono.

public class AccelerometerActivity extends AppCompatActivity implements SensorEventListener {

    private TextView mTvAccelerometer;
    private SensorManager sensorManager;
    private Sensor sensor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_accelerometer);
        mTvAccelerometer = findViewById(R.id.tv_accelerometer);
        // 获取传感器管理者对象
        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        // 获取加速度传感器对象
        sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (sensorManager!=null){
            // 添加监听器
            sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_UI);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        if(sensorManager != null){
            //解除注册
            sensorManager.unregisterListener(this,sensor);
        }
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // 传感器返回的数据
        float x=event.values[0];
        float y=event.values[1];
        float z=event.values[2];
        StringBuffer buffer = new StringBuffer();
        buffer.append("X方向的加速度为:").append(String.format("%.2f", x)).append("\n");
        buffer.append("Y方向的加速度为:").append(String.format("%.2f", y)).append("\n");
        buffer.append("Z方向的加速度为:").append(String.format("%.2f", z)).append("\n");
        if (x>20&&y>20){
            Toast.makeText(AccelerometerActivity.this,"欢迎",Toast.LENGTH_SHORT).show();
        }
        mTvAccelerometer.setText(buffer);
    }

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

    }
}

Para conocer más sobre el uso de sensores de teléfonos móviles, consulte Sensores en Android (total)

Supongo que te gusta

Origin blog.csdn.net/lanrenxiaowen/article/details/108057275
Recomendado
Clasificación