編輯:關於Android編程
繞Z軸旋轉角度:Azimuth,我稱之為正北轉角(指南針的磁北方向)
繞X軸旋轉角度:Pitch,我稱之為頂尾翹角
繞Y軸旋轉角度:Roll,我稱之為左右轉角
第一步:獲取傳感器系統服務
private SensorManager sensorManager; 初始化 protected void onCreate(Bundle savedInstanceState) { sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); }
第二步:初始化加速度的三軸變量和磁場傳感器的三軸變量
private float[] accelerometerValues; private float[] magnetFieldValues;
第三步:重寫監聽器
private final SensorEventListener sensorEventListener = new SensorEventListener() { @SuppressWarnings(deprecation) @Override public void onSensorChanged(SensorEvent event) { // TODO 自動生成的方法存根 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { accelerometerValues = event.values; } if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { magnetFieldValues = event.values; } }
第四步:注冊相應的傳感器到相應的監聽器
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /* 獲取系統的傳感器服務 */ sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); getSensorService(); }
private void getSensorService() { // int rate=SensorManager.SENSOR_DELAY_FASTEST; int rate=SensorManager.SENSOR_DELAY_NORMAL; Sensor accelerometerSensor = sensorManager .getDefaultSensor(Sensor.TYPE_ACCELEROMETER); sensorManager.registerListener(sensorEventListener, accelerometerSensor, rate); Sensor magnetSensor = sensorManager .getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); sensorManager.registerListener(sensorEventListener, magnetSensor, rate); }
第五步:獲取當前方向(定時200ms獲取方向)
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /* 獲取系統的傳感器服務 */ sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); getSensorService(); Timer updateTimer = new Timer(gForceUpdate); updateTimer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { // TODO 自動生成的方法存根 if (accelerometerValues != null &&magnetFieldValues != null) { float[] values = new float[3]; float[] R = new float[9]; SensorManager.getRotationMatrix(R, null, accelerometerValues, magnetFieldValues); SensorManager.getOrientation(R, values); values[0] = (float) Math.toDegrees(values[0]);// 正北轉角 values[1] = (float) Math.toDegrees(values[1]);// 頂尾翹角 values[2] = (float) Math.toDegrees(values[2]);// 左右轉角 /* 將三軸方向插入到數據庫中 */ } } }, 0, 200); }
第一步:獲取傳感器系統服務
private SensorManager sensorManager; 初始化 protected void onCreate(Bundle savedInstanceState) { sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); }
第二步:初始化方向變量
private float x_orientation = -999; private float y_orientation = -999; private float z_orientation = -999;第三步:重寫監聽器
private final SensorEventListener sensorEventListener = new SensorEventListener() { @SuppressWarnings(deprecation) @Override public void onSensorChanged(SensorEvent event) { // TODO 自動生成的方法存根 if (event.sensor.getType() == Sensor.TYPE_ORIENTATION) { orientationValues = event.values; z_orientation = event.values[0]; // 正北轉角 x_orientation = event.values[1]; // 頂尾翹角 y_orientation = event.values[2]; // 左右轉角 } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO 自動生成的方法存根 } };
第四步:注冊相應的傳感器
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /* 獲取系統的傳感器服務 */ sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); getSensorService(); }
private void getSensorService() { // int rate=SensorManager.SENSOR_DELAY_FASTEST; int rate=SensorManager.SENSOR_DELAY_NORMAL; @SuppressWarnings(deprecation) Sensor orientationSensor = sensorManager .getDefaultSensor(Sensor.TYPE_ORIENTATION); sensorManager.registerListener(sensorEventListener,orientationSensor, rate); }
第五步:獲取當前方向——定時200ms獲取方向
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /* 獲取系統的傳感器服務 */ sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); getSensorService(); Timer updateTimer = new Timer(gForceUpdate); updateTimer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { // TODO 自動生成的方法存根 if (x_orientation!=-999&& y_orientation!=-999&& z_orientation!=-999) { /* 將三軸方向插入到數據庫中 */ } } }, 0, 200); }
注意:需要在onResume()中注冊傳感器,在onDestroy()、onDestroy()和onPause()中注銷傳感器監聽
@Override protected void onResume() { // TODO 自動生成的方法存根 super.onResume(); getSensorService(); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); sensorManager.unregisterListener(sensorEventListener); } @Override protected void onPause() { // TODO 自動生成的方法存根 super.onPause(); sensorManager.unregisterListener(sensorEventListener); } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); sensorManager.unregisterListener(sensorEventListener); }
Android 程序所依賴一個Library程序B , B 程序中用到格式化json串,轉換成標准json串的要求 public static Strin
hybrid app編輯 Hybrid App(混合模式移動應用)是指介於web-app、native-app這兩者之間的app,兼具“Native App良
一.概述Nexus是一個基於maven的倉庫管理的社區項目.主要的使用場景就是可以在局域網搭建一個maven私服,用來部署第三方公共構件或者作為遠程倉庫在該局域網的一個代
靠譜助手作為國內知名的電腦安卓模擬器,為很多網友所熟知。但靠譜助手的一大诟病就是卡,也沒辦法設置。一個小軟件都能很卡,畫面不流暢、操作也不流暢。結合官方和廣