【TL8266】APP接收藍牙模塊發送過來的消息

前一篇文章講述瞭如何向藍牙模塊發送數據,這一篇講述如何接收數據,點擊開關按鈕發送AT指令,模塊會返回OK
這裏寫圖片描述

先做一個廣播接收器,按Ctrl+F關注mBluetoothLeService的操作

public class BleAtActivity extends Activity implements View.OnClickListener{

    private BroadcastReceiver mGattUpdateBroadcastReceiver=new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action=intent.getAction();

            if (BluetoothLeService.ACTION_GATT_DISCONNECTED.equals(action)){
                mBluetoothLeService.connect(mAddressString);
            }

            if (BluetoothLeService.ACTION_DATA_AVAILABLE.equals(action)){
                displayData(intent.getByteArrayExtra(BluetoothLeService.EXTRA_DATA));
            }
        }
    };

}    

其中接收到的數據是byte[]類型,轉換成string類型,以吐司的方式顯示出來,核心是對bytes的操作

public class BleAtActivity extends Activity implements View.OnClickListener{

    private void displayData(byte[] buf) {
        String s =asciiToString(buf);
        Toast.makeText(this,s,Toast.LENGTH_SHORT).show();
    }

    public String asciiToString(byte[] bytes) {
        char[] buf = new char[bytes.length];
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < buf.length; i++) {
            buf[i] = (char) bytes[i];
            sb.append(buf[i]);
        }
        return sb.toString();
    }

}    

再做一個過濾器,用於選擇與藍牙有關的廣播

public class BleAtActivity extends Activity implements View.OnClickListener{

    private IntentFilter makeGattUpdateIntentFilter(){
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(BluetoothLeService.ACTION_GATT_CONNECTED);
        intentFilter.addAction(BluetoothLeService.ACTION_GATT_DISCONNECTED);
        intentFilter.addAction(BluetoothLeService.ACTION_GATT_SERVICES_DISCOVERED);
        intentFilter.addAction(BluetoothLeService.ACTION_DATA_AVAILABLE);
        intentFilter.addAction(BluetoothLeService.ACTION_WRITE_SUCCESSFUL);
        return intentFilter;
    }

}

註冊。上面做了那麼多都是爲了registerReceiver函數,前面都是初始化,只有這一步是有效操作

public class BleAtActivity extends Activity implements View.OnClickListener{

    @Override
    protected void onResume() {
        super.onResume();
        registerReceiver(mGattUpdateBroadcastReceiver, makeGattUpdateIntentFilter());
        if (mBluetoothLeService!=null){
            mBluetoothLeService.connect(mAddressString);

        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver(mGattUpdateBroadcastReceiver);
    }

}

其他部分基本和前一篇沒什麼區別,其實應該寫成一篇,不過考慮到前面一篇那麼長,還是分開吧

源碼地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章