編輯:初級開發
一、連接設備
藍牙通訊分為server服務器端和clIEnt客戶端,它們之間使用BluetoothSocket 類的不同方法來獲取數據,
1. 作為服務器
如果一個設備需要和兩個或多個設備連接時,就需要作為一個server來傳輸,在android中提供了BluetoothServerSocket類來處理用戶發來的信息,服務器端套接字在接受(accepted) 一個客戶發來的BluetoothSocket時作出相應的響應。示例代碼如下:
private class AcceptThread extends Thread {
private final BluetoothServerSocket cwJServerSocket;
public AcceptThread() {
BluetoothServerSocket tmp = null; //使用一個臨時對象代替,因為cwJServerSocket定義為final
try {
tmp = myAdapter.listenUsingRfcommWithServiceRecord(NAME, CWJ_UUID); //服務僅監聽
} catch (IOException e) { }
cwJServerSocket = tmp;
}
public void run() {
BluetoothSocket socket = null;
while (true) { //保持連接直到異常發生或套接字返回
try {
socket = cwJServerSocket.accept(); //如果一個連接同意
} catch (IOException e) {
break;
}
if (socket != null) {
manageConnectedSocket(socket); //管理一個已經連接的RFCOMM通道在單獨的線程。
cwJServerSocket.close();
break;
}
}
}
public void cancel() { //取消套接字連接,然後線程返回
try {
cwJServerSocket.close();
} catch (IOException e) { }
}
}
在這裡android開發網提醒大家需要注意的是服務器一般處理多個任務不嫩阻塞,必須使用異步的方法這裡我們開了一個線程,目前android的虛擬機上層沒有提供I/O模型,這裡我們以後會講解高負載情況下性能優化解決方案。
2. 作為客戶端
以便初始化一個連接到遠程設備,首先必須獲取本地的BluetoothDevice對象,相關的方法在我們 android藍牙API之BluetoothAdapter類 的兩篇文章中有講到,這裡不再贅述,相關的示例代碼如下:
private class ConnectThread extends Thread {
private final BluetoothSocket cwJSocket;
private final BluetoothDevice cwjDevice;
public ConnectThread(BluetoothDevice device) {
BluetoothSocket tmp= null;
cwjDevice= device;
try {
tmp= device.createRfcommSocketToServiceRecord(CWJ_UUID); //客戶端創建
} catch (IOException e) { }
cwJSocket= tmp;
}
public void run() {
myAdapter.cancelDiscovery(); //取消發現遠程設備,這樣會降低系統性能
try {
cwJSocket.connect();
} catch (IOException connectException) {
try {
cwJSocket.close();
} catch (IOException closeException) { }
return;
}
manageConnectedSocket(cwJSocket); //管理一個已經連接的RFCOMM通道在單獨的線程。
}
public void cancel() {
try {
cwJSocket.close();
} catch (IOException e) { }
}
}
經過上面的介紹我們可以看到在android平台上使用藍牙通訊相對比較方便和簡單,有關數據的具體通訊我們將在下次android藍牙API之BluetoothSocket類(2) 講到manageConnectedSocket的具體實現。
android系統架構由5部分組成,分別是:Linux Kernel、android Runtime、LibrarIEs、Application Framework、A
外特性空間的Activity 我們先來看看,Android應用開發人員接觸的外特性空間中的Activity,對於AMS (activ
Google近期開始打擊盜版Android軟件,為開發者提供了 License Verification Library (LVL) 方式來防止Android軟件被盜版
這篇文章沒有打算有一個很好的邏輯去介紹android的某個方面,全盤大致上就是我接觸、了解android的ui開發後到現在的一些感想以及個人理解吧! &nbs