楊碎明 茍青青
(西安交通工程學院,陜西 西安 710399)
傳感器是一個內置物理裝置,能夠采集,探測,感知外界的信號,并將這些信息分析加工變成計算機所能處理的數(shù)據(jù),最終將信息量傳遞給其他裝置,本文主要對Android上各種傳感器做簡單介紹,繼而闡述傳感器的開發(fā)步驟以及使用技巧。
(一)傳感器種類
手機傳感器的種類主要有:加速度傳感器、磁力感應器、方向傳感器、重力感應器等等傳感器,本文主要應用姿態(tài)傳感器(Orientation),它的作用主要是實時記錄手機翻轉、移動的變化數(shù)據(jù),每次讀取的都有三個參數(shù),分別代表手機沿Y軸,P軸,R軸轉動角度。
傳感器調用流程大體分為四大步驟:獲取系統(tǒng)服務(getSystemService),設置傳感器類型(getDefaultSensor,注冊監(jiān)聽器(regListener),實現(xiàn)回調函數(shù)。
(一)獲取系統(tǒng)服務。調用getSystemService方法獲得SensorManager對象,該方法中會根據(jù)傳入?yún)?shù)的不同從而得到不同的傳感器對象。
(二)設置傳感器類型。這一步主要根據(jù)開發(fā)的需求,針對傳感器類型的,獲取某個傳感器對象。
(三)注冊監(jiān)聽器。在實際開發(fā)中,經常需要實時獲取傳感器的數(shù)據(jù)變,因此在得到了指定傳感器之后,要為傳感器注冊事件。當傳感器服務開始工作的時候,監(jiān)聽器會及時把外界變化信息傳遞給系統(tǒng),然后系統(tǒng)根據(jù)不同的信號做出響應。
(四)實現(xiàn)回調函數(shù)。經過上述三個步驟后,開發(fā)者要實現(xiàn)SensorEventListener接口,該接口為傳感器的回調進接口,重寫onSensorChanged方法,該方法傳入一個SensorEvent對象,開發(fā)者即可從該對象中獲得對應的數(shù)據(jù)。
1.理論基礎
手機旋轉過程中姿態(tài)傳感器如何定位:
Android姿態(tài)傳感器主要感應手機姿態(tài)方向的變化,它及時捕獲的是三個方位的參數(shù),分別代表手機沿Yaw軸、Pitch軸和Roll軸轉過的角度,Yaw軸是最好理解的,它總是與重力方向相反,它的方向是固定不變的,也就是說一直是豎直向上的,與手機所處的姿態(tài)無關。Pitch軸的方向總是與Yaw軸成90度夾角,因此其方向會隨著手機沿Yaw軸旋轉而改變。Roll軸的方向是沿著手機屏幕向上的,無論手機處于何種姿態(tài),Roll軸始終沿著手機的屏幕向上,所以手機圍繞Yaw軸或Pitch軸轉動的過程中,Roll軸也會跟隨手機一起轉動,而并不是保持與標準空間坐標系中的Y軸相同的方向。本案例采用姿態(tài)傳感器它已在Android手機中內置的功能,App開發(fā)人員可以調用相應的函數(shù)獲得相應的數(shù)據(jù),從而來判斷手機的姿態(tài)。
2.核心功能實現(xiàn)
本實例中,捕獲傳感器數(shù)據(jù)的類是Ball Listener類,Ball Listener類是 Sensor Listener的子類,其主要作用是對手機的方位變化進行監(jiān)聽并獲取相應的動態(tài)變化數(shù)據(jù)。Sensor Listener是Android系統(tǒng)中的內置類,它的主要功能是:在手機中傳感器參數(shù)發(fā)生變化時它會觸發(fā)傳感器的值。它提供了一個onSensor Changed方法,用來讀取來自傳感器的數(shù)據(jù)。(部分代碼如下)。
public class Ball Listener extends Activity {
MyGLView myGLView;
SensorManager對象引用
public void onCreate(Bundle savedInstanceState){
//創(chuàng)建myGLView
//在LinearLayout中加入myGLView
}
//開發(fā)SensorEventListener接口實現(xiàn)了的傳感器監(jiān)聽器
private SensorListener myListener = new SensorListener(){
public void onSensorChanged(int sensor,float[]values)
{
if(sensor == SensorManager.SENSOR_ORIENTATION)
{//判斷是否為加速度傳感器變化產生的數(shù)據(jù)
//計算出重力在屏幕上的投影方向
int directionDotXY[]=RotateUtil.getDirectionDot
(new double[]{values[0],values[1],values[2]}
);
//標準化xy位移量 }};
伴隨著Android 硬件平臺的不斷升級換代,手機功能越來越強大,將會不斷有更多的傳感器應用在手機App開發(fā)中,使手機游戲的趣味性、娛樂性必將大放異彩。值得一提的是由于獲取傳感器數(shù)據(jù)比較耗費系統(tǒng)資源,因此要及時關閉。
[1]蘇亞光,吳亞峰,索依娜.Android平臺下傳感器技術開發(fā)計步器應用.
[2]吳麗.Android姿態(tài)傳感器在手機游戲開發(fā)中的應用[J].學術期刊,2014(9).