Android方向检测肤色

Android方向检测肤色,第1张

概述所以我需要知道基于Android的手机什么时候旋转x,y,z方向为基于倾斜的程序然后我使用流动良好的代码,利用磁力和加速度找到方向,因为方向检测器不可靠,这在x,z平面上是好的,但是让我们说一个人在一个循环移动的公共汽车上将他们的手机固定在一个固定的风景位置,然后Android注册y方向移动,即使用户没有移动他们的手机在y方向,所以程序失败,但仅仅使用加速度

所以我需要知道基于Android的手机什么时候旋转x,y,z方向为基于倾斜的程序然后我使用流动良好的代码,利用磁力和加速度找到方向,因为方向检测器不可靠,这在x,z平面上是好的,但是让我们说一个人在一个循环移动的公共汽车上将他们的手机固定在一个固定的风景位置,然后AndroID注册y方向移动,即使用户没有移动他们的手机在y方向,所以程序失败,但仅仅使用加速度也不准确,我想知道如何解决相对于用户检测y-运动的问题?

public class MotionListener {        String service_name = Context.SENSOR_SERVICE;        SensorManager sensorManager;        Sensor sensor;        public MotionListener(Context context) {            sensorManager = (SensorManager) context.getSystemService(service_name);            SensorManager sm = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);            Sensor aSensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);            Sensor mfSensor = sm.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);            sm.registerListener(myAccelerometerListener,aSensor,SensorManager.SENSOR_DELAY_GAME);            sm.registerListener(myMagneticFIEldListener,mfSensor,SensorManager.SENSOR_DELAY_GAME);        }        float[] accelerometerValues;        float[] magneticFIEldValues;        final SensorEventListener myAccelerometerListener = new SensorEventListener() {            public voID onSensorChanged(SensorEvent sensorEvent) {                if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER)                    accelerometerValues = sensorEvent.values;                float[] values = new float[3];                float[] R = new float[9];                try {                    SensorManager.getRotationMatrix(R,null,accelerometerValues,magneticFIEldValues);                    SensorManager.getorIEntation(R,values);                    values[0] = (float) ((float) values[0] * 180 / Math.PI);                    values[1] = (float) ((float) values[1] * 180 / Math.PI);                    values[2] = (float) ((float) values[2] * 180 / Math.PI);                    System.out.println((int)values[0] + "   " + (int)values[1] + "        " + (int)values[2]);                    setTiltCoordinates(values);                } catch (NullPointerException e) {                }            public voID onAccuracyChanged(Sensor sensor,int accuracy) {            }        };
最佳答案好吧,如果您只是查看加速度计数据,那么您只需要在x,y和z方向上有三个值.其中一个将获得最大的吸引力,你通常可以将其视为“向下”的方向.

移动可能存在问题,例如,如果用户在现场旋转,使手机感觉不是由于重力引起的加速,如果这足够大,它可能会开始看起来方向“向下”,但是,你必须要足够快地旋转以产生接近1g的加速度,我非常怀疑公共汽车能够做到这一点.

您接下来的一个大问题是,x,y和z数据值只是三个垂直轴,每个手机可以以不同方式定向.在一部手机上,’y'(通常被认为是上下轴)可能是通过屏幕,屏幕位于zx,平面上.另一部手机可能与屏幕成一定角度.

因此,从加速度计数据来看,您无法分辨出手机的方向.虽然,也许AndroID SDK可以解释这个问题并“调整”实际的加速度计数据,以允许所有手机看到相同的数据.

总结

以上是内存溢出为你收集整理的Android方向检测肤色全部内容,希望文章能够帮你解决Android方向检测肤色所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1139921.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存