對Android應用開發實踐說明
下面文章介紹下什么是Android應用開發,再介紹Android應用開發的之前,首先先讓大家了解下什么是Android應用開發,Android在未公開之前常被傳聞為Google電話或GPhone。
為了實現我們的增強現實引擎,***還需要用到加速度傳感器數據。不過,Android應用開發已經為我們簡化了這些數據的收集工作。在上一篇介紹增強現實技術的文章中,我們的示例程序可以請求手機的方位,并調用位置管理器對象中的registerListener來檢索指南針數據。
我們也可以使用同樣的技術來請求加速度傳感器數據,我們用來請求加速度傳感器數據的代碼如下所示:
- sensorMan = (SensorManager) ctx.getSystemService(Context.SENSOR_SERVICE);
- sensorMan.registerListener(listener,
- sensorMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
- SensorManager.SENSOR_DELAY_FASTEST);
我們調用了上下文對象(上述代碼中為ctx)的getSystemService方法。下面是用于方向監聽器與加速度傳感器監聽器的完整代碼。
- private SensorEventListener listener = new SensorEventListener(){
- public static volatile float direction = (float) 0;
- public static volatile float inclination;
- public static volatile float rollingZ = (float)0;
- public static volatile float kFilteringFactor = (float)0.05;
- public static float aboveOrBelow = (float)0;
- public void onAccuracyChanged(Sensor arg0, int arg1){}
- public void onSensorChanged(SensorEvent evt)
- {
- float vals[] = evt.values;
- if(evt.sensor.getType() == Sensor.TYPE_ORIENTATION)
- {
- float rawDirection = vals[0];
- direction =(float) ((rawDirection * kFilteringFactor) +
- (direction * (1.0 - kFilteringFactor)));
- inclination =
- (float) ((vals[2] * kFilteringFactor) +
- (inclination * (1.0 - kFilteringFactor)));
- if(aboveOrBelow > 0)
- inclinationinclination = inclination * -1;
- if(evt.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
- {
- aboveOrBelow =
- (float) ((vals[2] * kFilteringFactor) +
- (aboveOrBelow * (1.0 - kFilteringFactor)));
- }
- }
- }
- };
呵呵,這里的代碼稍微有點多,下面我們來了解一下。首先,要為監聽器設置所有的值。這意味著,您可以隨時可以向監聽器查詢指南針方位與手機傾角。這些值會隨著您請求的更新的類型的不同而有所變化。
然后,我們會收到傳感器信息,這時需要確定出兩種主要信息:
1. 手機指向
2. 屏幕相對于水平面的傾角
***種信息稱為方位角;第二種信息稱為傾角。為了確定這些值,***個計算任務就是過濾出攝像頭的指南針運動。這稱為翻轉過濾器(rolling filter)。變量direction用于指出手機頂部指向哪里,而非攝像頭本身指向哪里,所以我們需要進行一些校正。
第二個數學計算任務是利用翻轉過濾器對斜度進行處理,從而得到一個以度為單位的度量值,其中水平的度量值為90,向上或向下半傾的度量值為45,垂直向上或垂直向下的度量值為0。注意,當得數為45的時候,我們無法確定手機到底是向上傾斜,還是向下傾斜。 這時加速度傳感器就派上用場了。
它能夠確定出傾角的正負,正值表示從水平線向上,復制表示從水平線向下。簡言之,我們需要的東西都能從加速度傳感器那里得到。到目前為止,打造自己增強現實技術引擎所需的工具我們已經全部介紹過了,您還需要的就是少許數學知識、一些Android應用開發和大量的精力了。
如果您對打造增強現實應用程序的興趣遠勝于打造增強現實引擎本身的話,可以關注我當前正在為Android開發的一個開源的增強現實技術引擎。為了獲得更多的進展情況,可以在Twitter上跟隨twitter.com/androidarkit。雖然我喜歡盡可能把所有的數學和繪圖代碼放在一起,并將三種信息統一疊放到攝像頭上。
但是這些已經超出了本文的討論范圍。然而,本文加上上一篇文章,已經構成了對Android的指南針、攝像頭預覽、加速度傳感器與GPS子系統進行了全面的介紹?,F在,您已經具備了創建大型增強現實技術應用程序所需的全部構件。
【編輯推薦】