Android开发获取重力加速度和磁场强度的方法

Android开发获取重力加速度和磁场强度的方法,第1张

概述本文实例讲述了Android开发获取重力加速度和磁场强度的方法。分享给大家供大家参考,具体如下:

本文实例讲述了AndroID开发获取重力加速度和磁场强度的方法。分享给大家供大家参考,具体如下:

AndroID获取重力加速度和磁场强度主要依靠:

Sensor.getRotationMatrix (float[] R,float[] I,float[] gravity,float[] geomagnetic)

输入数据:

gravity为重力传感器测得的重力加速度float[3];
geomagnetic为罗盘传感器测得的地磁数据float[3];

输出数据:

R为通过这个方法计算得到的从手机的设备到坐标系到真实世界坐标系的转换矩阵

I为从将地磁数据转换到重力数据所在坐标的旋转矩阵

[0 0 g] = R * gravity (g = 重力加速度)
[0 m 0] = I * R * geomagnetic (m = 磁场强度)

下面是我做的结果图

核心部分代码如下:

public class MainActivity extends AppCompatActivity implements SensorEventListener {  private static final String TAG = "CompassActivity";  private SensorManager sensorManager;  //记录rotationMatrix矩阵值  private float[] r = new float[9];  private float[] gravity = null;  private float[] geomagnetic = null;  private float[] I=new float[9];  private Handler handler=new Handler(){    @OverrIDe    public voID handleMessage(Message msg) {      if(gravity!=null&&geomagnetic!=null)      {        if(SensorManager.getRotationMatrix(r,I,gravity,geomagnetic)) {          float gri = gravity[0] * r[6] + gravity[1] * r[7] + gravity[2] * r[8];          float h= (I[3]*r[0]+I[4]*r[3]+I[5]*r[6])*geomagnetic[0]+              (I[3]*r[1]+I[4]*r[4]+I[5]*r[7])*geomagnetic[1]+              (I[3]*r[2]+I[4]*r[5]+I[5]*r[8])*geomagnetic[2];          TextVIEw textVIEw = (TextVIEw) findVIEwByID(R.ID.textVIEw);          textVIEw.setText("重力加速度" + gri + "\n"+"磁场强度" + h + "\n");        }      }    }  };  @OverrIDe  protected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_main);    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);  }  @OverrIDe  public boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.menu_main,menu);    return true;  }  @OverrIDe  public boolean onoptionsItemSelected(MenuItem item) {    // Handle action bar item clicks here. The action bar will    // automatically handle clicks on the Home/Up button,so long    // as you specify a parent activity in AndroIDManifest.xml.    int ID = item.getItemID();    //noinspection SimplifiableIfStatement    if (ID == R.ID.action_settings) {      return true;    }    return super.onoptionsItemSelected(item);  }  @OverrIDe  public voID onSensorChanged(SensorEvent sensorEvent) {    switch (sensorEvent.sensor.getType()){      case Sensor.TYPE_ACCELEROMETER:        gravity=sensorEvent.values;        handler.sendEmptyMessage(0);        break;      case Sensor.TYPE_MAGNETIC_FIELD:        geomagnetic=sensorEvent.values;        handler.sendEmptyMessage(0);        break;      default:break;    }  }  @OverrIDe  public voID onAccuracyChanged(Sensor sensor,int i) {  }  private voID showMessage(String message){    VIEw vIEw=findVIEwByID(R.ID.fab);    final Snackbar snackbar=Snackbar.make(vIEw,message,Snackbar.LENGTH_INDEFINITE);    snackbar.setAction("关闭",new VIEw.OnClickListener() {      @OverrIDe      public voID onClick(VIEw vIEw) {        snackbar.dismiss();      }    });    snackbar.show();  }  @OverrIDe  protected voID onPause() {    super.onPause();    sensorManager.unregisterListener(this);  }  @OverrIDe  protected voID onResume() {    super.onResume();    Sensor sensor1=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);    sensorManager.registerListener(this,sensor1,SensorManager.SENSOR_DELAY_UI);    Sensor sensor2=sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);    sensorManager.registerListener(this,sensor2,SensorManager.SENSOR_DELAY_UI);  }}

更多关于AndroID相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android视图View技巧总结》、《Android编程之activity *** 作技巧总结》、《Android文件 *** 作技巧汇总》、《Android资源 *** 作技巧汇总》及《Android控件用法总结》

希望本文所述对大家AndroID程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Android开发获取重力加速度和磁场强度的方法全部内容,希望文章能够帮你解决Android开发获取重力加速度和磁场强度的方法所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1143958.html

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

发表评论

登录后才能评论

评论列表(0条)

保存