更進一步地說,我們認為 Android Open Accessory Development Kit ( ADK ) 的推出是 Android 3.1 平板電腦作業系統、甚至是 2.3.4 智慧型手機作業系統之中最重要的變革。(註: Android 3.1 平板電腦作業系統已內建 Android Open Accessory Development Kit ( ADK ) 的 Android Open Accessory APIs ,同時 Android 2.3.4 智慧型手機作業系統可以透過 Google APIs 附加函式庫 ( the Google APIs add-on library ) 的方式運作。)
原因無他,主要是 Android Open Accessory Development Kit ( ADK ) 讓相容於它的 USB 週邊設備能夠透過 USB 外接式傳輸介面的方式,主動地與 Android 2.3.4 智慧型手機或者 Android 3.1 平板電腦啟動連接,並進行 USB 連接傳輸工作。
另一方面,由於過往大部份的 Android 智慧型手機礙於只能扮演 USB 設備端 ( USB Device ) 角色之故,導致使用者不易擴充它們的 USB 週邊設備。
因此, Android 此舉或許也是希望 USB 週邊設備反過來成為 USB 主機端 ( USB Host ) 角色,再透過 Android Open Accessory Development Kit ( ADK ) 的協助,讓 USB 週邊設備仍然可以與不具備 USB 主機端 ( USB Host ) 角色的 Android 智慧型手機互動溝通,亦即轉個彎達成 Android 智慧型手機能夠擴充 USB 週邊設備的目的。(註:本篇講義下方會對 USB 主機端 ( USB Host )與 USB 設備端 ( USB Device ) 的概念架構進行說明。)
所以,無論您是身為電子產業當中的一份子、或者您早已是 Android 手機或平板電腦應用程式的軟體開發者,皆有必要深入去探究 Android Open Accessory Development Kit ( ADK ) 的細節與發展。(註: Android 3.1 平板電腦作業系統已內建 Android Open Accessory Development Kit ( ADK ) 的 Android Open Accessory APIs,同時 Android 2.3.4 智慧型手機作業系統可以透過 Google APIs 附加函式庫 ( the Google APIs add-on library ) 的方式運作。)
Android 教學: USB ( Universal Serial Bus )
不過,當您要深入探究 Android Open Accessory Development Kit ( ADK ) 時 ,我們認為您應先理解 USB 的概念架構。
因此,我們在以下的內容中,會透過 USB 的概念架構來談 Android Open Accessory Development Kit ( ADK ) 。
因此,如何改善 《 Android 裝置》的 USB 外接式傳輸介面之效用,成為 Android 3.1 平板電腦作業系統此次改版的重心。
Android 教學: Accessory Mode 與 Host Mode
Android 3.1 平板電腦作業系統對於 USB 外接式傳輸介面之相關程式開發的支援,可以用兩個面向去體察。
其一, 設備模式 ( Accessory Mode ) :讓處於 USB 設備端 ( USB Device ) 的《 Android 裝置》硬體,可以連接那些特別做為 USB 主機端 ( USB Host ) 角色的《 USB 週邊設備》,此時《 USB 週邊設備》才能主動啟動資料傳輸工作並提供電力供給。請注意,它們兩方的資料傳輸是雙向互通的。
倘若,您先前鑽研過 Arduino 開發原始碼之電子產品雛型開發平台 ( Open Source Electronics Prototyping Platform ) ,一定對於 Android Open Accessory Development Kit ( ADK ) 感到似曾相識!
沒錯, Android Open Accessory Development Kit ( ADK ) 實際上是建構於 Arduino 開發原始碼之電子產品雛型開發平台 ( Open Source Electronics Prototyping Platform ) 。
因此,專屬於 Android Open Accessory Development Kit ( ADK ) 的電路板架構,其實是基於 Arduino Mega2560 USB 微控制器板(又稱 Arduino Mega 2560 控制板)的硬體技術架構而來。
但是,因為 Arduino Mega2560 USB 微控制器板(又稱 Arduino Mega 2560 控制板) 本身只支援 USB 設備端 ( USB Device ) 角色 ,而非 USB 主機端 ( USB Host ) 角色 。因此, Android 在硬體技術架構上又結合了可支援 USB 主機端 ( USB Host ) 角色的 Circuits@Home 之 USB 主機端擴充板 ( USB Host Shield ) 。
我們綜合 Android Developers 官網與官方部落格所示,其實目前國外已有五家業者提供相容於 ADK 的開發板 ( Android Open Accessory Compatible Development Boards ) 的販售或預售。
Android 教學: Android Open Accessory Development Kit ( ADK ) 的已知限制
不過,我們剛才有提到:
由於,過往大部份的 Android 智慧型手機礙於只能扮演 USB 設備端 ( USB Device ) 角色之故,導致使用者不易擴充它們的 USB 週邊設備。
因此,Android 此舉或許也是希望 USB 週邊設備反過來成為 USB 主機端 ( USB Host ) 角色,再透過 Android Open Accessory Development Kit ( ADK ) 的協助,讓 USB 週邊設備仍然可以與不具備 USB 主機端 ( USB Host ) 角色的 Android 智慧型手機互動溝通,亦即轉個彎達成 Android 智慧型手機能夠擴充 USB 週邊設備的目的。
雖然,透過 Android Open Accessory Development Kit ( ADK ) 可以達到上述之目的。然而,如何讓 USB 週邊設備既可以成為 USB 主機端 ( USB Host ) 角色,又可以不必肩負提供電力之 USB 主機端 ( USB Host ) 責任。則是未來 Android 需要努力解決之處。(資料來源: Android Developers 官方部落格)
另外,有一點還要提醒比較進階的讀者朋友們,由於, Service 處理程序 ( Service process ) 之重要性,遠高於同樣處於系統後端的背景處理程序 ( Background Process ) 。
因此,如果您的 Android 手機應用程式有執行時間超過五秒之功能,則強烈建議您不要只單純地在 Activity 應用程式組件之中,為主執行緒 ( Main Thread ) 新增另一條新的執行緒去處理這個功能。
因為,如果該 Activity 應用程式組件所產生的處理程序不小心落入背景處理程序 ( Background Process ) 的順位,則其就易於被 Android 作業系統所消滅。
所以,您需要將此條新的執行緒放置到 Service 應用程式組件的方式去運作。以確保 Activity 應用程式組件所產生的處理程序不小心落入背景處理程序 ( Background Process ) 的順位而被 Android 作業系統所消滅時,該工作仍會一直在Service 處理程序 ( Service process ) 之中運行。(註:上述這段屬進階內容,入門學習者可以先略過不看。)