O sensor no Android --- sensor de aceleração

Acelerômetro

O sensor de aceleração também é chamado de sensor G, que retorna os valores de aceleração dos eixos x, y e z.

Este valor inclui a influência da gravidade e a unidade é m/s^2.

Coloque o telefone sobre a mesa, o padrão do eixo x é 0, o padrão do eixo y é 0 e o padrão do eixo z é 9,81 (devido à gravidade inerente da Terra).

Coloque o telefone voltado para baixo em uma mesa com eixo z de -9,81.

Incline o telefone para a esquerda e o eixo x será positivo.

Incline o telefone para a direita e o eixo x será negativo.

Incline o telefone para cima e o eixo y será negativo.

Incline o telefone para baixo e o eixo y será positivo.

O tipo de acelerômetro Android é Sensor.TYPE_ACCELEROMETER

Retorne o valor do sensor de aceleração por meio de android.hardware.SensorEvent.

O sensor de aceleração é amplamente utilizado em telefones celulares e também é muito simples no processo de desenvolvimento (é realmente muito simples obter o valor. Se você deseja realizar uma determinada função, ainda precisa pensar em como adicionar julgamento.)

Pegue uma castanha: a função de sacudir o telefone:

Este é um julgamento relativamente simples. Depois de obter os valores de x, y e z, julgue esses três valores. Se você agitar o telefone, esses valores definitivamente mudarão. Definimos um limite. Quando seus valores exceder um determinado Shake após um número, é mais fácil de entender com a implementação do código

Realização da função de vibração do telefone móvel

@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 pode ser visto no código acima, é relativamente simples avaliar se o celular foi sacudido ou não alterando os valores de x, y e z. Não importa qual valor exceda 20, considera-se que o O telefone foi sacudido, mas um ponto é ignorado, ou seja, o usuário também pode acionar o gatilho agitando o telefone em uma direção. O melhor é julgar apenas zy, e o xy julgado deve ultrapassar ao mesmo tempo 20 pode ser identificado como tremor, o seguinte é o código modificado

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

Levante a mão para ligar a tela

Há também uma função mais complicada do que sacudi-la: levante a mão para iluminar a tela. Isso também é para julgar xyz, então não vou colocar o código aqui. Vamos falar brevemente sobre a ideia. Quando atendermos o telefone, o sensor de aceleração xyz O valor definitivamente mudará, e podemos julgar seu valor final, que é qual é o valor do sensor quando o celular está voltado para o nosso rosto (x:0, y:8, quando abaixo minha cabeça para o celular, z: 5), podemos julgar esse valor, e se o celular atingir esse valor em 200ms, será considerado que levantou a mão para ligar a tela

parte do código

A seguir está o código para obter o valor do sensor de aceleração e agitar o telefone

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 obter mais uso de sensores de telefones celulares, consulte Sensores no Android (total)

Acho que você gosta

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