android开发笔记之2012版辅助开发工具包(ADT)新功能特性介绍及安装使用
原文鏈接:http://android.eoe.cn/topic/android_sdk
2012年的Android輔助設備開發工具包(ADK)是Android開放設備協議(AOA)設備的最新參考實現,它被用于幫助Android硬件輔助設備開發者
和軟件開發者開發制造Android輔助設備。ADK2012基于Arduino開源電子產品原型設計平臺,并增加了一些軟硬件方面的擴展,而這些擴展能夠使該工具包開發的產品與Android設備進行通信。
在2012年的Google I/O開發者大會上只有數量很少的工具包被發行。如果你沒有得到其中的一個工具包,不要著急,關于硬件的規范和設計文件將由生產商和業余愛好者發布。你將看到有相似功能的工具包,你可以通過購買得到它們,當然你也可以自己開發一套工具包。
這個ADK中一個重要的新功能是你可以通過USB連接播放音頻文件。如果你對在Android平臺上開發與音頻相關的USB輔助設備感興趣,請確定這個
ADK中包含了對USB音頻擴展塢的參考實現。
組件
ADK2012基于Arduino開源電子產品原型設計平臺,同時也是開放的硬件設計。其硬件設計文件和固件源代碼包含在了下載的ADK軟件包中。
此ADK包含了兩個重要的物理硬件組件:
1.主板包括了微處理器,USB連接,電源接口和輸入輸出針口。這個主板可以被移除然后獨立于余下的硬件單獨使用。
2.屏蔽傳感器,發光二極管(LED),輸入控制,音頻放大器和揚聲器輸出,把它們包含在一個自定義的多邊形盒外殼中。
以下是主要的ADK硬件特性:
* 一個32位的ARM Cortex M3 微處理器。
* 將Android設備的USB連接和程序設計和調試的電腦連接分離。
* 燈光,顏色,距離,溫度,濕度,氣壓,加速傳感器
* 微SD卡插槽
* 支持藍牙
此ADK預載了一個你可以立即使用的鬧鐘固件程序。ADK 2012是一個Android伴隨程序,你可以在Google Play上下載它。Android應用程序和ADK固件(一個Arduino的草圖)的源代碼都可以在此頁下載。
與ADK 2012一起發布的還有其他的部件,這些部件可以幫助你開發輔助設備,包括:
* AC能源適配器
* USB A 到 微型USB B的連接電纜
* 微型USB B到微型USB AB連接器(小的,矩形的插頭)
* 微型 SD卡,在ADK的SDK卡槽中已經預裝
使用鬧鐘
ADK中預載了一個鬧鐘程序。這個固件程序允許你像使用鬧鐘一樣使用這個ADK。
一下是ADK使用步驟:
1.輕輕按壓外殼兩個最寬的面來打開ADK
2.將提供的AC電源適配器(圓形插頭)連接到ADK主板上,或者將一根USB電纜連接到端口標記的電腦和你的電腦的USB端口上。
3.將你的指尖持續放在控制面板的鬧鐘符號上。
注意:你可能需要將你的手指持續放在適當的地方1-2秒。
4.使用時鐘數字內部的+、-符號來設置正確的時間。
5.將你的指尖放在鬧鐘符號上來激活鬧鐘。
6.使用時鐘數字內部的+、-符號來設置鬧鐘時間。
7.使用最近兩個時鐘數字內部的+、-符號來開啟或關閉鬧鐘。
8.將你的指尖持續放在鬧鐘符號上,然后點擊外殼上方的滑動控制來改變鬧鐘的音調。
使用ADK2012版伴隨應用中的鬧鐘的步驟:
1.在你的Android設備中下載伴隨應用,Android版本需要3.1(API等級12)或更高:
:* 用一個有NFC功能的Android設備,解鎖,并按住ADK外殼左側,按照提示安裝應用。
:-或者-
:* 在你的設備上啟動Google Play搜索ADK 2012應用并安裝。如果你找不到應用程序,你的設備可能是不兼容的,請嘗試在另一個設備上安裝。
2.用下面其中的一種方法將你的Android設備連接到ADK上:
:* 用藍牙連接:
:1.將AC電源適配器的插頭插入ADK中
:2.將你的Android設備中的藍牙功能開啟(設置-藍牙)
:3.在設置頁面中,按藍牙選項來查看匹配的設備
:4.選擇搜索設備來找到ADK2012輔助設備,然后根據屏幕上的指示進行連接
:5.匹配完成后,在你的Android設備上開啟ADK2012醫用程序
:6.在啟動畫面中,選擇使用藍牙按鈕
:7.在匹配設備的列表中,選擇ADK 2012設備
:8.ADK 2012應用程序應該切換到菜單畫面中,你可以開始與ADK輔助設備進行交互。
:* 用USB進行連接:
1.將AC電源適配器的插頭插入ADK中
2.將微型USB AB的連接插頭(小的矩形插頭)連接到ADK板上端口標記的聽筒上。
3.解鎖你的Android設備,將微型USb B的連接插頭連接到你的設備上。
注意:你的設備必須支持Android usb輔助設備模式。支持這種模式的設備包括Google Nexus設備。
4.在Android設備上,你應該看見連接到ADK DemoKit 2012的提示,選擇 是 。
5.ADK 2012應用程序應該自動啟動,然后你可以與ADK進行交互。
注意:當以USB連接Android設備來使用ADK的時候,要確保AC電源適配器已經插入。連接到電腦的USb連接插頭不提供充足的電壓來給ADK以及連接到設備的USb連接插頭提供電力。
播放音頻
ADK2012帶有音頻輸出功能,包括一個放大器和揚聲器。你可以通過藍牙或者usb連接使用它讓你的Android設備播放音頻。
通過藍牙播放音頻:
1.根據上一節的指示,通過藍牙將你的Android設備連接到ADK上
2.在你的Android設備上,操作到設置-藍牙頁面來查看匹配的設備列表,并確認與ADK連接
3.選擇ADK2012邊上的設置圖標
4.確保媒體音頻功能已啟用
5.打開一個播放音樂或其他音頻的應用程序
6.播放歌曲或聲音,并通過ADK揚聲器來聆聽他!
通過USB來播放音頻,你必須使用Android4.1(API等級16)或者更高版本的設備:
1.將AC電源適配器的插頭插到ADK中
2.將微型USb AB的連接插頭(小的矩形插頭)連接到ADK板上端口標記的聽筒上。
3.解鎖你的Android設備,將微型USb B的連接插頭連接到你的設備上。
注意:你的設備必須支持Android USb輔助設備模式。支持這種模式的設備包括Google Nexus設備。
4.在Android設備上,你應該看見一個連接到ADK Deomkit 2012的提示,選擇取消使ADK僅作為媒體設備連接。
5.打開一個播放音樂或其他音頻的應用程序
6.播放歌曲或聲音,并通過ADK揚聲器來聆聽它!
注意:當以USb連接Android設備來使用ADK的時候,要確保AC電源適配器已經插入。連接到電腦的USb連接插頭不提供充足的電壓來給ADK以及連接到設備的USb連接插頭提供電力。
使用ADK 2012開發輔助設備
ADK 2012是一個硬件平臺,也是一套以原型設計Android輔助設備的軟件庫。這個部分討論如何為ADK變成建立開發環境,來使它做你想做的事以及為建立你自己的Android輔助設備進行軟件測試。
下載ADK源碼
ADK2012支持的軟件和硬件可以在Android源碼庫。按照以下的指示為ADK獲取源材料。
下載ADK2012軟件,源碼,硬件設計說明書:
1.給你的開發系統下載并安裝Git
2.按照Android open source project網站上的說明下載并安裝回購工具
3.在終端窗口中,給所下載的資源文件建立一個新的指南,初始化并同步本地存儲庫:
$> mkdir android-accessories
$> cd android-accessories
$> repo init -u?https://android.googlesource.com/accessories/manifest
$> repo sync
在成功完成這個步驟后,你應該擁有利用ADK2012工作的源碼和工具。
- adk2012/board- ADK2012的源代碼和硬件設計文件
- adk2012/app- Android伴隨應用的源碼
- external/ide- ADK2012繼承開發環境(IDE)的源碼
- external/toolchain- ADK2012IDE使用的文件系統和工具鏈
建立開發環境
ADK2012帶有集成開發環境(IDE),你可以使用它來開發軟件并未ADK2012輔助設備編寫程序。下面的指示解釋了如何建立并運行 ADK2012的IDE。
建立和運行ADK2012的IDE:
1從java.oracle.com上下載并安裝JDK6或者更高的版本
2.為你的開發平臺下載ADK2012的IDE
:* Windows
:* Mac
:* Linux32bit,64bit
3.解壓下載的文件
4.解壓ADK2012_IDE文件夾并執行arduino文件來運行應用程序
在你成功安裝并運行ADK2012 IDE后,你必須配置它以使用ADK2012資源庫。
使用ADK類庫配置ADK2012 IDE:
1.啟動ADK2012 IDE ,然后選擇File>Preferences.
2.在Preferences對話框中,記下Sketchbook location這個目錄
3.復制 /adk2012/board/library/ADK2這個目錄和它的內容到你的sketchbook/libraries/目錄,如此,你就可以創建一個sketchbook/libraries/ADK2目錄。
4.停止然后重啟ADK2012 IDE。
5.在IDE中,選擇File>Examples>ADK2,然后選擇其中一個例子
* clock-預載在ADK2012中的示例
* BluetoothScan-一個將輔助設備與Android設備通過藍牙連接的示例演示代碼
* usbaccessory-一個將輔助設備與Android設備通過USB電纜連接的示例演示代碼
6.將ADK板上的電腦端口與你的用于開發的電腦用微型USB電纜相連接。
7.在ADK2012 IDE中,用ADK建立一個串行端口連接。選擇Tools>Serial Port然后選擇用于ADK的端口。
8.在ADK2012 IDE中,通過Tools>Board>GoogleADK2選擇ADK
9.修改一個示例或新建一個
10.通過File>Upload上傳示例到ADK。當ADK2012 IDE提示Done uploading,示例已經上傳而且ADK已經準備好于你的Android設備通信。
使用ADK的替代生成系統
一個替代的,基于文件生成和上傳的系統也可以在ADK2012中使用。這個系統基于命令行,也是為當使用IDE環境去裝載軟件到輔助設備不太方便時的生產環境設計的。
建立環境:
1.下載ADK2012源碼文件
2.在一個終端窗口中,進入/adk2012/board/MakefileBasedBuild
3.運行一下命令,然后跟著指示:
$> ./setup
為你的輔助設備建立一個程序
1.將你的輔助設備的代碼放到MakefileBasedBuild/app這個目錄中,包括所有的類庫文件。將app/main.c這個文件的格式作為你的標準格式
2.運行以下命令,然后跟著指示:
$> ./build
在你的輔助設備上載入程序:
1.運行構建程序,并確保你的程序編譯成功
2.將輔助設備與你的電腦用USB連接
3.檢查你的輔助設備連接到哪一個端口上,然后在flash腳本中修改UART這個變量以修正端口地址。在Linux機器上,端口地址一般是/dev/ttUSB0
4.運行以下命令以在輔助設備上載入程序
$> ./flash
ADK怎樣與Android設備連接
Android輔助設備的核心特性是它的與Android設備連接及通信的能力。在你的輔助設備和Android設備被之間連接一個快速穩定的連接是構建一個應用于輔助設備被的軟件的第一步。這個部分介紹ADK2012中使用連接和通信的要領,然后,你就可以應用它們去開發你自己的Android輔助設備。
用藍牙進行ADK連接
ADK2012應用和硬件部分的輔助設備使用藍牙串行端口配置文件(SPP)連接來通信。這種連接允許ADK輔助設備和Android設備之間的雙向通信。
注意:ADK硬件的實現允許使用其他配置文件和多種連接方式。然而,ADK2012與Android應用之間的基本通信是基于SPP。
輔助設備的藍牙代碼
為了使用藍牙進行通信,ADK2012輔助設備的clock.ino示例在執行setup()方法時調用一個btStart()方法以使使用無線電頻率通信成為可能和開啟藍牙的監聽模式。
ADK L;
void setup() {
L.adkInit();
L.btStart();
}
...
void btStart(){
uint8_t i, dlci;
int f;
| 123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | L.btEnable(adkBtConnectionRequest, adkBtLinkKeyRequest, adkBtLinkKeyCreated,adkBtPinRequest, NULL);dlci = L.btRfcommReserveDlci(RFCOMM_DLCI_NEED_EVEN);if(dlci) dbgPrintf("BTADK: failed to allocate DLCIn"); else{//change descriptor to be valid...for(i -1; i < sizeof(sdpDescrADK); i++){if(sdpDescrADK[i] == MAGIX){if(f i;else break;}}if(i != -1){dbgPrintf("BTADK: failed to find a single marker in descriptorn");L.btRfcommReleaseDlci(dlci);return;}sdpDescrADK[f] = dlci >> 1;dbgPrintf("BTADK has DLCI %un", dlci);L.btRfcommRegisterPort(dlci, btAdkPortOpen, btAdkPortClose, btAdkPortRx);L.btSdpServiceDescriptorAdd(sdpDescrADK, sizeof(sdpDescrADK)); } |
}
請注意,sdpDescrADK這個對象包括了一個通用的唯一標識符(UUID)在變量BT_ADK_UUID中。這個標識符必須與在bluetoothSocket連接請求中提供的設備的UUID匹配。這個連接請求在Android應用的代碼中可以找到。
一旦藍牙可以與以上代碼一起使用,輔助設備監聽連接請求。ADK類庫處理監聽和連接詳情,然后,輔助設備在每一個循環運行時調用
ADK::adkEventProcess()方法:
void loop(void)
{
...
L.adkEventProcess(); //let the adk framework do its thing
...
}
如果一個藍牙連接已經被建立了,任何命令都被路由到btAdkPortRx()這個回調方法(這個回調方法在ADK類庫中作為btStart()方法的一部分注冊)然后根據情況執行。ADK輔助設備通過藍牙連接用ADK::btRfcommPortTx()方法發回消息。如果你想了解更多細節,仔細看在clock.ino中這些方法的實現。
Android應用的藍牙代碼
在ADK2012Android應用中,處理藍牙連接的代碼封裝在一個BTConnection類中。在這個類中,應用的請求訪問藍牙適配器然后與ADK2012輔助設備建立一個連接。一下是相關代碼的摘要:
mAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice device = mAdapter.getRemoteDevice(address);
mSocket = device.createInsecureRfcommSocketToServiceRecord(ADK_UUID);
mSocket.connect();
注意第二行中的ADK_UUID參數。這個標識符必須輔助設備輸出的標識符(就是之前提到的BT_ADK_UUID)相符。否則,協議將會失效,然后BluetoothSocket連接不會建立。一旦連接建立了,你從socket連接獲得了一個InputStream和OutputStream對象以與輔助設備通信。
mInStream = mSocket.getInputStream();
mOutStream = mSocket.getOutputStream();
仔細閱讀BTConnection.java文件,這個文件由下載的ADK2012軟件提供,你可以從中獲取更多的詳情。
用USB進行ADK連接
ADK2012應用和輔助設備也可以那個USB連接來通信,這一點與最原始ADK類似。
輔助設備的USB代碼
ADK類庫擁有大部分USB連接的實現細節,輔助設備的代碼必須調用一些方法以初始化USB連接,其中包括設置輔助設備的標示符字符串:
ADK L;
void setup() {
L.adkInit();
L.usbSetAccessoryStringVendor(...);
L.usbSetAccessoryStringName(...);
L.usbSetAccessoryStringLongname(...);
L.usbSetAccessoryStringVersion(...);
L.usbSetAccessoryStringUrl(...);
L.usbSetAccessoryStringSerial(...);
L.usbStart();
}
注意:標識符字符串必須與所連接的Android應用的USB輔助設備過濾設置相符,否則,應用將不會與輔助設備建立連接。
一旦USB與以上代碼一起工作了,輔助設備開始監聽連接請求。ADK類庫處理監聽到的事件和連接細節,然后輔助設備在每一次循環執行時調用ADK::adkEventProcess()方法:
void loop(void)
{
...
L.adkEventProcess(); //let the adk framework do its thing
...
}
輔助設備必須檢查一個正在使用的USB連接以處理命令和發送消息。以下是相關代碼的摘要:
void loop() {
if (L.accessoryConnected()) {
int recvLen = L.accessoryReceive(msg, sizeof(msg));
if (recvLen > 0) {
... // process message
}
| 1 | L.accessorySend(outmsg, outmsgLen); |
}
L.adkEventProcess();
}
想獲得更多詳情,請仔細閱讀這些方法在clock.ino示例中的實現代碼。
Android應用的USB代碼
ADK2012的Android應用中,處理USB連接的代碼被封裝在一個UsbConnection類中,這個類建立一個BroadcastReceiver以監聽USB事件然后在一個符合條件的連接事件被接收到是試圖進行連接。以下是相關代碼的摘要:
import com.android.future.usb.UsbAccessory;
import com.android.future.usb.UsbManager;
mUSBManager = UsbManager.getInstance(this);
UsbAccessory acc = mUSBManager.getAccessoryList()[0];
if (mUSBManager.hasPermission(acc)) return;
ADK2012應用使用支持庫來實現USB輔助設備連接,這么做是為了支持Android2.3.4(API等級為10)的設備。如果你只需要支持Android3.1(API等級為12)和更高版本的設備,你可以替換以下代碼中的前四行:
import android.hardware.usb.UsbAccessory
import android.hardware.usb.UsbManager
mUSBManager = (UsbManager) getSystemService(Context.USB_SERVICE);
UsbAccessory acc = (UsbAccessory)
| 1 | intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);</java> |
注意,此應用只在USB輔助設備標識符信息與res/xml/usb_accessory_filter.xml文件中的信息相符時才接受事件,這些在應用的清單文件中有記錄:
ADK2012輔助設備不會接受來自其他USB設備的連接。
一旦連接被建立了,應用可以通過文件輸入輸出流與輔助設備通信,這一點在一下代碼中可以見到:
ParcelFileDescriptor mFD = mUSBManager.openAccessory(acc);
if (mFD != null) {
FileDescripter fd = mFD.getFileDescriptor();
mIS = new FileInputStream(fd); // use this to receive messages
mOS = new FileOutputStream(fd); // use this to send commands
}
仔細閱讀UsbConnection.java文件,這個文件在ADK2012源碼中可以找到,你可以從中獲得更多的實現細節。
USB音頻接口的實現
ADK2012中一個重要的新特性是可以使用USB連接播放音頻。這個創新舉動作為Android開放輔助設備(AOA)協議2.0的一個更新被介紹,它可以在Android4.1(API等級16)或更高的設備上使用。
ADK2012為開發者提供了一個關于這個功能的參考實現。你不需要在Android設備上安裝任何應用,輔助設備開發者需要支持AOAv2.這個實現演示了將16位,44.1kHz立體聲PCM源數據的音頻輸出壓縮到一個單通道中。而這一切都是基于輔助設備上的音頻硬件。
使用由ADK類庫提供的音頻輸出特性只要求調用一些方法。第一個調用的是輔助設備中的常規的setup()方法,這個方法使輔助設備準備好進行USB連接和音頻輸出,以下為示例代碼的摘要:
ADK L;
void setup() {
L.audioInit();
L.usbh_init()
L.usbStart();
}
想要獲取更多的關于ADK::audioInit()方法的信息,請查看libraries/ADK/Audio.c類庫文件。想要獲取更多關于ADK::usbh_init()方法的信息,請查看libraries/ADK/Usbh.c類庫文件。
完成setup這個方法后,loop()方法調用ADK::adkEventProcess()方法以處理音頻輸出和其他ADK的方法:
void loop(void)
{
...
L.adkEventProcess(); //let the adk framework do its thing
...
}
這個調用運行ADK的任務隊列,然后作為運行過程的一部分,任務隊列運行libraries/ADK/Usbh_c中的usbh_work()方法,這個方法處理音頻輸出請求。仔細閱讀這個方法的實現細節。想要獲得更多的關于音頻輸出的實現細節,請查看libraries/ADK/accessroy.c這個類庫文件。
轉載于:https://my.oschina.net/Ci3giemTe/blog/143447
總結
以上是生活随笔為你收集整理的android开发笔记之2012版辅助开发工具包(ADT)新功能特性介绍及安装使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做独立站要做私域营销,做亚马逊更要做私域
- 下一篇: educoder中Spark Graph