草庐IT

安卓方向传感器

coder 2023-12-10 原文

是否可以在查看相机预览时知道手机指向哪个方向,还是必须像指南针一样将手机放平。

谢谢

最佳答案

是的——下面的代码应该可以完成这项工作

public class Test extends Activity  implements SensorEventListener{

    public static float swRoll;
    public static float swPitch;
    public static float swAzimuth;


    public static SensorManager mSensorManager;
    public static Sensor accelerometer;
    public static Sensor magnetometer;

    public static float[] mAccelerometer = null;
    public static float[] mGeomagnetic = null;


    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // onSensorChanged gets called for each sensor so we have to remember the values
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
            mAccelerometer = event.values;
        }

        if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
            mGeomagnetic = event.values;
        }

        if (mAccelerometer != null && mGeomagnetic != null) {
            float R[] = new float[9];
            float I[] = new float[9];
            boolean success = SensorManager.getRotationMatrix(R, I, mAccelerometer, mGeomagnetic);

            if (success) {
                float orientation[] = new float[3];
                SensorManager.getOrientation(R, orientation);
                // at this point, orientation contains the azimuth(direction), pitch and roll values.
                  double azimuth = 180 * orientation[0] / Math.PI;
                  double pitch = 180 * orientation[1] / Math.PI;
                  double roll = 180 * orientation[2] / Math.PI;
            }
        }
    }



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        accelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        magnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
    }

    @Override
    protected void onResume() {
        super.onResume();

        mSensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);
        mSensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_GAME);
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(this, accelerometer);
        mSensorManager.unregisterListener(this, magnetometer);
    }
}

关于安卓方向传感器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3972912/

有关安卓方向传感器的更多相关文章

  1. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  2. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  3. ruby - 如何使用 prawn 更改现有 pdf 的方向? - 2

    我有一个pdf文件。我想将其所有页面向右旋转90度。如何使用Prawngem实现此目的?当我尝试使用现有的pdf作为模板并尝试对其进行旋转时,它不起作用。我徒劳地尝试了以下。require'prawn/core'require'prawn/layout'require'prawn/measurement_extensions'pdf=Prawn::Document.new(:page_size=>[4.in,6.in],:template=>'orig.pdf',:layout=>'potrait')do|p|p.rotate(90)endpdf.render_file("./test

  4. (一)专题介绍:移动端安卓手机改造成linux服务器&linux服务器中安装软件、部署前后端分离项目实战 - 2

    快捷目录前言一、涉及到的相关技术简介二、具体实现过程及踩坑杂谈1.安卓手机改造成linux系统实现方案2.改造后的手机Linux中软件的安装3.手机Linux中安装MySQL5.7踩坑实录4.手机Linux中安装软件的正确方法三、Linux服务器部署前后端分离项目流程1.前提准备(安装必要软件,搭建环境):2.前后端分离项目的详细部署过程:总结前言总体概述:本篇文章隶属于“手机改造服务器部署前后端分离项目”系列专栏,该专栏将分多个板块,每个板块独立成篇来详细记录:手机(安卓)改造成个人服务器(Linux)、Linux中安装软件、配置开发环境、部署JAVA+VUE+MySQL5.7前后端分离项目

  5. iphone - 如何从视频中提取方向信息? - 2

    在网络上浏览了大量文档后,iPhone似乎总是以480x360的纵横比拍摄视频,并在视频rails上应用变换矩阵。(480x360可能会改变,但对于给定设备而言始终相同)这是一种在iOS项目中修改ffmpeg源代码并访问矩阵http://www.seqoy.com/correct-orientation-for-iphone-recorded-movies-with-ffmpeg/的方法这是在iOS-4中查找转换矩阵的更清晰的方法Howtodetect(iPhoneSDK)ifavideofilewasrecordedinportraitorientation,orlandscape.

  6. javascript - 如何抵消要在局部轴上应用的全局方向力? - 2

    我想对对象的局部轴施加一个向前的力,但我使用的引擎只允许我在全局轴上施加一个力。我可以访问对象的全局旋转作为四元数。然而,我不熟悉使用quats(通常未受过高等数学训练)。这些信息是否足以抵消沿所需轴施加的力?怎么办?例如,要在全局范围内推进,我会这样做:this.entity.rigidbody.applyForce(0,0,5);但是为了保持沿物体局部轴施加的力,我需要根据物体的旋转四轴以不同的方式沿轴分布施加的力,例如:w:0.5785385966300964x:0y:-0.815654993057251z:0我研究了四元数试图解决这个问题,但是观看有关它们是什么以及为什么使用它

  7. javascript - 在 Bootstrap Datetimepicker 中更改方向 - 2

    我正在尝试更改BootstrapDatetimepicker的方向我什至尝试使用this但我得到:optionorientationisnotrecognized我在html中对datetimepicker的定义是:在javascript中我有这样的东西来改变语言:$('.input-group.date').datetimepicker({locale:"es",});我尝试添加location:'bottomauto'但没有任何反应。 最佳答案 在阅读了很多帖子和文档之后,我成功了!对于future的访客,可以阅读所有可用选项h

  8. javascript - 使用纬度和经度生成带有方向的谷歌地图链接 - 2

    你好,我正在尝试创建一个谷歌地图链接,该链接将重定向到带有方向的map。我将在链接中传递坐标。这是我的代码:varlatDes=this.items[id].LongitudeWD;varlongDes=this.items[id].LatitudeWD;varurl="https://www.google.com/maps/dir/?api=1";varorigin="origin="+tempLatitude+","+tempLongitude;vardestination="&destination="+latDes+","+longDes;varnewUrl=newURL(ur

  9. javascript - 更改谷歌地图方向中的单个标记 - 2

    我在GooglemapAPI中添加单个标记时遇到问题。我搜索了很多类似以下链接,ChangeindividualmarkersingooglemapsdirectionsapiV3.但是我无法在我的代码上实现相同的功能。在suppressMarkers:true的帮助下,我能够阻止默认标记。现在只显示路线指示。现在我如何添加起点和终点的制造商。以下是我的代码。functionGoogleMap_selected(){varlattitude_value=document.getElementById('slectedLat').value;varlongitude_value=docu

  10. javascript - 使用纬度/经度的谷歌地图方向 - 2

    我有2个地方的纬度/经度。如何从googlemapsapi获取路线?我想显示map和方向文本。 最佳答案 vardirectionDisplay;vardirectionsService=newgoogle.maps.DirectionsService();varmap;functioninitialize(){directionsDisplay=newgoogle.maps.DirectionsRenderer();varmyOptions={mapTypeId:google.maps.MapTypeId.ROADMAP,}map

随机推荐