編輯:關於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程序 依賴庫引用Gson 報java.lang.NoClassDefFoundError: com/google/gson/Gson 解決方法
Android 程序所依賴一個Library程序B , B 程序中用到格式化json串,轉換成標准json串的要求 public static Strin
Android知識普及
hybrid app編輯 Hybrid App(混合模式移動應用)是指介於web-app、native-app這兩者之間的app,兼具“Native App良
Android 項目部署之Nexus私服搭建和應用
一.概述Nexus是一個基於maven的倉庫管理的社區項目.主要的使用場景就是可以在局域網搭建一個maven私服,用來部署第三方公共構件或者作為遠程倉庫在該局域網的一個代
靠譜助手卡怎麼辦
靠譜助手作為國內知名的電腦安卓模擬器,為很多網友所熟知。但靠譜助手的一大诟病就是卡,也沒辦法設置。一個小軟件都能很卡,畫面不流暢、操作也不流暢。結合官方和廣