1. 程式人生 > >Android開發藍芽篇之藍芽配對、連線與接收資料

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,勿在意:
歡迎入門學習交流,系統收費0.1,勿在意