Android의 센서---가속도 센서

가속도계

가속도 센서는 G-센서라고도 불리며 x, y, z 축의 가속도 값을 반환합니다.

이 값에는 중력의 영향이 포함되어 있으며 단위는 m/s^2입니다.

전화기를 테이블 위에 평평하게 놓으면 x축의 기본값은 0, y축의 기본값은 0, z축의 기본값은 9.81입니다(지구의 고유 중력으로 인해).

z축이 -9.81인 테이블 위에 전화기를 뒤집어 놓습니다.

휴대전화를 왼쪽으로 기울이면 x축이 양수입니다.

휴대폰을 오른쪽으로 기울이면 x축이 음수가 됩니다.

전화기를 위로 기울이면 y축이 음수가 됩니다.

전화기를 아래로 기울이면 y축이 양수입니다.

Android 가속도계 유형은 Sensor.TYPE_ACCELEROMETER입니다.

android.hardware.SensorEvent를 통해 가속도 센서 값을 반환합니다.

가속도 센서는 휴대폰에 널리 사용되며 개발 과정에서도 매우 간단합니다.(값을 얻는 것은 정말 매우 간단합니다. 특정 기능을 구현하려면 판단을 추가하는 방법에 대해 여전히 생각해야 합니다. )

밤을 가져 가라 : 전화를 흔드는 기능 :

이것은 비교적 간단한 판단입니다. x, y, z 값을 구한 후 이 세 값을 판단합니다. 휴대폰을 흔들면 이 값이 확실히 변경됩니다. 임계값을 설정합니다. 해당 값이 ​​숫자 이후에 특정 Shake를 초과하면 코드 구현으로 이해하기가 더 쉽습니다.

휴대폰 흔들림 기능 구현

@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);
    }

위의 코드에서 알 수 있듯이, x, y, z의 값을 변화시키면서 휴대폰이 흔들렸는지 여부를 판단하는 것은 상대적으로 간단하며, 어떤 값이 20을 초과하더라도 흔들림이 없는 것으로 간주됩니다. 휴대폰이 흔들렸으나 한 지점이 무시되었습니다. 즉, 사용자가 휴대폰을 한 방향으로 흔들어 트리거를 실행할 수도 있습니다. 가장 좋은 것은 zy만 판단하는 것이며, 판단된 xy는 동시에 20을 초과해야 합니다. 흔들리는 것으로 식별될 수 있으며, 다음은 수정된 코드입니다.

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

손을 올려 화면을 켜세요

흔들기보다 더 복잡한 기능도 있습니다. 손을 들어 화면을 밝게 해주세요. 이것도 xyz를 판단하기 위한 것이므로 여기에는 코드를 넣지 않겠습니다. 아이디어에 대해 간단히 이야기하겠습니다. 전화를 받으면 가속도 센서 xyz 값은 확실히 변할 것입니다. 최종 값은 휴대폰이 얼굴을 향했을 때의 센서 값(x:0, y:8, 휴대폰으로 고개를 숙였을 때)이 무엇인지 판단할 수 있습니다. Phone, z: 5) 이 값을 판단할 수 있으며, 휴대폰이 200ms 이내에 이 값에 도달하면 손을 들어 화면을 켜는 것으로 간주됩니다.

코드 부분

다음은 가속도 센서의 값을 구해 휴대폰을 흔드는 코드입니다.

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) {

    }
}

휴대폰 센서 사용량에 대한 자세한 내용은 Android의 센서(전체)를 참조하세요.

추천

출처blog.csdn.net/lanrenxiaowen/article/details/108057275