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

首頁 > 系統 > Android > 正文

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

2019-12-12 01:47:50
字體:
來源:轉載
供稿:網友

本文實例講述了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程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉尔市| 海盐县| 屏边| 昔阳县| 镇平县| 台南市| 化州市| 申扎县| 岳普湖县| 周口市| 缙云县| 甘孜| 九江市| 南澳县| 乐至县| 旅游| 花垣县| 兴国县| 台南市| 东乡族自治县| 西贡区| 泰兴市| 东安县| 兴安县| 新余市| 东乌| 四平市| 达孜县| 奇台县| 龙游县| 从化市| 横峰县| 蕉岭县| 江永县| 樟树市| 兰坪| 景德镇市| 太白县| 济源市| 武功县| 瓮安县|