国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android開發獲取重力加速度和磁場強度的方法

2019-10-22 18:24:46
字體:
來源:轉載
供稿:網友

本文實例講述了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 = 磁場強度)

下面是我做的結果圖

Android,重力加速度,磁場強度

核心部分代碼如下:

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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西宁市| 蕲春县| 太谷县| 连平县| 广宁县| 沧州市| 青川县| 北碚区| 无棣县| 张家界市| 新绛县| 杭锦后旗| 同德县| 麻城市| 张家口市| 玉林市| 北京市| 张家界市| 中方县| 安国市| 黎平县| 浦东新区| 屏东市| 南充市| 察雅县| 额济纳旗| 化州市| 高邮市| 普兰县| 淮安市| 玉门市| 巨野县| 鄱阳县| 杭锦后旗| 阆中市| 乌恰县| 通许县| 团风县| 黄山市| 江阴市| 定日县|