android 相机判断水平

目录

添加权限:

android 相机判断水平java代码


添加权限:

<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代码

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) {
        // 不需要实现
    }
}

相关推荐

  1. android 相机判断水平

    2024-06-12 09:52:05       31 阅读
  2. Android 依据Build相关信息判断机型

    2024-06-12 09:52:05       56 阅读
  3. 水文判断质数

    2024-06-12 09:52:05       65 阅读
  4. Android 网络状态判断

    2024-06-12 09:52:05       64 阅读
  5. android 判断是否联网

    2024-06-12 09:52:05       36 阅读
  6. android 水平居中对齐并举例

    2024-06-12 09:52:05       35 阅读
  7. 水文判断同构数

    2024-06-12 09:52:05       55 阅读
  8. android 判断文件是否存在

    2024-06-12 09:52:05       29 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-12 09:52:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-12 09:52:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-12 09:52:05       82 阅读
  4. Python语言-面向对象

    2024-06-12 09:52:05       91 阅读

热门阅读

  1. 多个AAR打包成一个AAR

    2024-06-12 09:52:05       35 阅读
  2. C++之 delete删除拷贝构造函数和拷贝赋值运算符

    2024-06-12 09:52:05       31 阅读
  3. 第一章:SQL简单基础的法则

    2024-06-12 09:52:05       30 阅读
  4. 【Unity】控制人物左右移动和跑步的实现

    2024-06-12 09:52:05       37 阅读
  5. 鱼香肉丝ROS一键安装

    2024-06-12 09:52:05       22 阅读
  6. 力扣题解 >>> 二叉树

    2024-06-12 09:52:05       23 阅读
  7. 15、架构-可靠通讯之服务安全

    2024-06-12 09:52:05       34 阅读
  8. Android基础-adb命令

    2024-06-12 09:52:05       27 阅读
  9. Mid-journey Prompts -core

    2024-06-12 09:52:05       26 阅读