Android方向傳感器的使用方法
在應(yīng)用程序中使用SensorManager.getOrientation()來獲得原始數(shù)據(jù)。
public static float[] getOrientation (float[] R, float[] values)
第一個參數(shù)是R用來保存磁場和加速度的數(shù)據(jù),通過該函數(shù)獲取方位角。
第二個參數(shù)是函數(shù)輸出,數(shù)據(jù)自動填充。
- values[0]:方向角,但用(磁場+加速度)得到的數(shù)據(jù)范圍是(-180~180),也就是說,0表示正北,90表示正東,180/-180表示正南,-90表示正西。而直接通過方向感應(yīng)器數(shù)據(jù)范圍是(0~359)360/0表示正北,90表示正東,180表示正南,270表示正西。
- values[1]:pitch 傾斜角即由靜止狀態(tài)開始,前后翻轉(zhuǎn),手機頂部往上抬起(0~-90),手機尾部往上抬起(0~90)
- values[2]:roll 旋轉(zhuǎn)角 即由靜止狀態(tài)開始,左右翻轉(zhuǎn),手機左側(cè)抬起(0~90),手機右側(cè)抬起(0~-90)
通過函數(shù)getRotationMatrix獲取R
public static boolean getRotationMatrix (float[] R, float[] I, float[] gravity, float[] geomagnetic)
注冊監(jiān)聽
sensorManager.registerListener(this, acc_sensor, SensorManager.SENSOR_DELAY_GAME); sensorManager.registerListener(this, mag_sensor,SensorManager.SENSOR_DELAY_GAME);
主要代碼
import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity implements SensorEventListener{
private SensorManager sensorManager;
private Sensor acc_sensor;
private Sensor mag_sensor;
//加速度傳感器數(shù)據(jù)
float accValues[] = new float[3];
//地磁傳感器數(shù)據(jù)
float magValues[] = new float[3];
//旋轉(zhuǎn)矩陣,用來保存磁場和加速度的數(shù)據(jù)
float r[] = new float[9];
//模擬方向傳感器的數(shù)據(jù)(原始數(shù)據(jù)為弧度)
float values[] = new float[3];
TextView showTV = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show_change=(TextView) findViewById(R.id.show_change);
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
acc_sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mag_sensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
// 注冊監(jiān)聽:
sensorManager.registerListener(this, acc_sensor, SensorManager.SENSOR_DELAY_GAME);
sensorManager.registerListener(this, mag_sensor,SensorManager.SENSOR_DELAY_GAME);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
// 回調(diào)方法
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
accValues = event.values.clone();
}
else if(event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD){
magValues = event.values.clone();
}
/**
* r:要填充的旋轉(zhuǎn)數(shù)組
* I: 將磁場數(shù)據(jù)轉(zhuǎn)換進實際的重力坐標中,一般默認情況下可以設(shè)置為null
* gravity: 加速度傳感器數(shù)據(jù)
* geomagnetic:地磁傳感器數(shù)據(jù)
*/
SensorManager.getRotationMatrix(r, null, accValues, magValues);
/**
* R:旋轉(zhuǎn)數(shù)組
* values:模擬方向傳感器的數(shù)據(jù)
*/
SensorManager.getOrientation(r, values);
//將弧度轉(zhuǎn)化為角度后輸出
StringBuffer buff = new StringBuffer();
for(float value : values){
value=(float) Math.toDegrees(value);
buff.append(value + " ");
}
showTV.setText(buff.toString());
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持腳本之家。
- Android實現(xiàn)計步傳感器功能
- Android開發(fā)獲取傳感器數(shù)據(jù)的方法示例【加速度傳感器,磁場傳感器,光線傳感器,方向傳感器】
- Android編程基于距離傳感器控制手機屏幕熄滅的方法詳解
- Android開發(fā)中方向傳感器定義與用法詳解【附指南針實現(xiàn)方法】
- Android開發(fā)中的重力傳感器用法實例詳解
- Android 獲取傳感器列表整理及簡單實例
- Android亮屏速度分析總結(jié)
- Android四大組件之Activity詳解
- Android四大組件之Service詳解
- Android傳感器SensorEventListener之加速度傳感器
相關(guān)文章
Android 媒體開發(fā)之MediaPlayer狀態(tài)機接口方法實例解析
這篇文章主要介紹了Android 媒體開發(fā)之MediaPlayer狀態(tài)機接口方法實例解析,需要的朋友可以參考下2017-08-08
flutter傳遞值到任意widget(當需要widget嵌套使用需要傳遞值的時候)
這篇文章主要介紹了flutter傳遞值到任意widget(當需要widget嵌套使用需要傳遞值的時候),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07
Android UI 之實現(xiàn)多級樹形列表TreeView示例
這篇文章主要介紹了Android UI 之實現(xiàn)多級列表TreeView示例,TreeView就是在Windows中常見的多級列表樹,有興趣的可以了解一下。2017-03-03
Android的Launcher啟動器中添加快捷方式及小部件實例
這篇文章主要介紹了在Android的Launcher啟動器中添加快捷方式及窗口小部件的方法,包括在自己的應(yīng)用程序中添加窗口小部件AppWidget的例子,需要的朋友可以參考下2016-02-02
Android編程實現(xiàn)讀取工程中的txt文件功能
這篇文章主要介紹了Android編程實現(xiàn)讀取工程中的txt文件功能,結(jié)合實例形式詳細分析了Android讀取txt文件的原理、操作步驟與相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2017-02-02
Android Canvas之drawBitmap方法案例詳解
這篇文章主要介紹了Android Canvas之drawBitmap方法案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08

