Android開發藍芽篇之藍芽配對、連線與接收資料
首先是此部分涉及到的類
- BluetoothAdapter 藍芽介面卡,即該類裡面包含了藍芽使用中常用到的一些API。
- BroadcastReceiver 廣播接收者,不難猜測,藍芽裝置開啟或者關閉、搜尋到周邊裝置就要來通知應用,那麼Android系統就會以廣播的方式來通知。
- BluetoothDevice 藍芽裝置,即一個相當於藍芽裝置的類,實現了Parcelable介面,用於Android的IPC通訊機制。裡面實在廣播時傳送的藍芽的相關資訊:藍芽名稱,地址,型別和uuid等。
藍芽配對操作
public void makePair(Context context, String address,
MakePariBlueToothListener mMakePariListener) throws Exception {
this.mMakePariListener = mMakePariListener;
this.context = context;
IntentFilter iFilter = new IntentFilter(
BluetoothDevice.ACTION_BOND_STATE_CHANGED);
context.registerReceiver(mSearchReceiver, iFilter);
enableBlueTooth();
BluetoothDevice device = BTadapter.getRemoteDevice(address);
device.createBond();
}
在藍芽配對過程中,裝置會以廣播的方式告知應用配對的過程和結果如:配對開始、配對成功與失敗、配對結束等,所以這裡建立一個MakePariBlueToothListener 的配對監聽器的介面,在配對的廣播中呼叫監聽器的各個結果由使用者處理配對結果。所以要傳遞一個配對監聽器的物件,還有註冊廣播接收者。
之後依據對方藍芽地址,獲取藍芽裝置物件BluetoothDevice,呼叫Android的api的device.createBond()方法開始藍芽配對,之後再以廣播的方式獲取到配對結果。
public interface MakePariBlueToothListener {
public void whilePari(BluetoothDevice device);
public void pairingSuccess(BluetoothDevice device);
public void cancelPari(BluetoothDevice device);
}
在開始配對後呼叫whilePari( )方法,並將配對的藍芽裝置物件返回給呼叫者。
在配對成功後呼叫pairingSuccess( )方法,也將配對的藍芽裝置物件返回給呼叫者。
在配對失敗或者取消後呼叫cancelPari( )方法,也將配對的藍芽裝置物件返回給呼叫者。
廣播接收者的處理:
private BroadcastReceiver mSearchReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
String action = arg1.getAction();
switch (action) {
case BluetoothDevice.ACTION_BOND_STATE_CHANGED:
device = arg1.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
switch (device.getBondState()) {
case BluetoothDevice.BOND_BONDING:// 正在配對
mMakePariListener.whilePari(device);
break;
case BluetoothDevice.BOND_BONDED:// 配對結束
mMakePariListener.pairingSuccess(device);
break;
case BluetoothDevice.BOND_NONE:// 取消配對/未配對
mMakePariListener.cancelPari(device);
default:
break;
}
break;
}
}
};
在廣播接收者中,接收到ACTION_BOND_STATE_CHANGED的廣播時,說明配對時藍芽裝置的關係狀態發生改變,依據改變的狀態,呼叫之前的藍芽配對監聽器的不同方法。
在收到BOND_BONDING的狀態時說明開始配對了,就呼叫監聽器的whilePari( )方法。
接收到BOND_BONDED的狀態時說明已經配對了,並且配對成功了,就可以呼叫監聽器的pairingSuccess( )方法。
接收到BOND_NONE就表示配對失敗了,或者是配對取消了,就可以呼叫監聽器的cancelPari( )方法。
統一由使用者做出不同的相應操作。
藍芽連線與接收資料操作
public BluetoothSocket getBluetoothSocket(String address)
throws IOException {
BluetoothDevice device = BTadapter.getRemoteDevice(address);
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(UUID
.fromString(BlueTooth.MY_UUID));
return socket;
}
首先依據對方的藍芽地址獲取藍芽裝置物件,再從藍芽裝置物件中獲取裝置連線的Socket,而UUID是由Android裝置統一的藍芽的通用唯一識別碼 ,獲取到socket後就可以直接在socket中得到對應的輸入流和輸出流了
socket.connect();
InputStream is = socket.getInputStream();
這裡就是先通過socket建立連線後,獲取一個輸入流的物件,之後就流的操作了,也不再多說了。
歡迎入門學習交流,系統收費0.1,勿在意: