android 相机判断水平

目录

添加权限:

[android 相机判断水平java代码](#android 相机判断水平java代码)


添加权限:

bash 复制代码
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-feature android:name="android.hardware.sensor.accelerometer"/>
<uses-feature android:name="android.hardware.sensor.gyroscope"/>

android 相机判断水平java代码

java 复制代码
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private SensorManager sensorManager;
    private Sensor accelerometer;
    private Sensor gyroscope;

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

        sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        gyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
        
        sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
        sensorManager.registerListener(this, gyroscope, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onResume() {
        super.onResume();
        sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
        sensorManager.registerListener(this, gyroscope, SensorManager.SENSOR_DELAY_NORMAL);
    }

    @Override
    protected void onPause() {
        super.onPause();
        sensorManager.unregisterListener(this);
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            float[] gravity = event.values;
            float x = gravity[0];
            float y = gravity[1];
            float z = gravity[2];

            double angle = Math.toDegrees(Math.acos(z / Math.sqrt(x * x + y * y + z * z)));

            // 判断设备是否水平
            if (angle < 5) {
                Toast.makeText(this, "设备水平", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "设备不水平", Toast.LENGTH_SHORT).show();
            }
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // 不需要实现
    }
}
相关推荐
像风一样自由40 分钟前
【001】frida API分类 总览
android·frida
casual_clover41 分钟前
Android 之 kotlin 语言学习笔记四(Android KTX)
android·学习·kotlin
移动开发者1号2 小时前
Android 大文件分块上传实战:突破表单数据限制的完整方案
android·java·kotlin
移动开发者1号3 小时前
单线程模型中消息机制解析
android·kotlin
每次的天空5 小时前
Android第十五次面试总结(第三方组件和adb命令)
android
追随远方5 小时前
Android音频开发:Speex固定帧与变长帧编解码深度解析
android·音视频
消失的旧时光-19435 小时前
Android和硬件通信
android
0wioiw05 小时前
安卓基础(编译.Class)
android
0wioiw05 小时前
安卓基础(aar)
android
_一条咸鱼_5 小时前
Android Runtime链接(Linking)阶段准备工作(27)
android·面试·android jetpack