閱讀162 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android 藍牙API之BluetoothAdapter類使用

     使用BluetoothAdapter類,你能夠在Android設備上查找周邊的藍牙設備然後配對(綁定),藍牙通訊是基於唯一地址MAC來相互 傳輸的,考慮到安全問題Bluetooth通訊時需要先配對。然後開始相互連接,連接後設備將會共享同一個RFCOMM通道以便相互傳輸數據,目前這些實 現在Android 2.0或更高版本SDK上實現。

       一、查找發現 findding/discovering devices

       對於Android查找發現藍牙設備使用BluetoothAdapter類的startDiscovery()方法就可以執行一個異步方式獲取周邊的藍牙設備,因為是一個異步的方法所以我們不需要考慮線程被阻塞問題,整個過程大約需要12秒時間,這時我們緊接著注冊一個 BroadcastReceiver 對象來接收查找到的藍牙設備信息,我們過濾ACTION_FOUND這個 Intent動作來獲取每個遠程設備的詳細信息,通過附加參數在Intent字段EXTRA_DEVICE 和 EXTRA_CLASS, 中包含了每個BluetoothDevice 對象和對象的該設備類型 BluetoothClass ,示例代碼

Java代碼:
  1. private final BroadcastReceiver cwjReceiver = new BroadcastReceiver() {
  2. public void onReceive(Context context, Intent intent) {
  3. String action = intent.getAction();
  4. if (BluetoothDevice.ACTION_FOUND.equals(action)) {
  5. BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
  6. myArrayAdapter.add(device.getName() + " android123 " + device.getAddress()); //獲取設備名稱和mac地址
  7. }
  8. }
  9. };
  10. // 注冊這個 BroadcastReceiver
  11. IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
  12. registerReceiver(cwjReceiver, filter);
複製代碼

       記住在Service或Activity中重寫onDestory()方法,使用unregisterReceiver方法反注冊這個BroadcastReceiver對象保證資源被正確回收。

       一、些其他的狀態變化有
       ACTION_SCAN_MODE_CHANGED 額外參數 EXTRA_SCAN_MODE 和 EXTRA_PREVIOUS_SCAN_MODE以及SCAN_MODE_CONNECTABLE_DISCOVERABLE、 SCAN_MODE_CONNECTABLE和SCAN_MODE_NONE,

       二、配對綁定 bnded/paired device
       在Android中配對一個藍牙設備可以調用BluetoothAdapter類的getBondedDevices()方法可以獲取已經配對的設備,該方法將會返回一個BluetoothDevice數組來區分每個已經配對的設備,示例代碼如下:

Java代碼:
  1. Set<BluetoothDevice> pairedDevices = cwjBluetoothAdapter.getBondedDevices();

  2. if (pairedDevices.size() > 0) //如果獲取的結果大於0,則開始逐個解析
  3. {

  4. for (BluetoothDevice device : pairedDevices) {

  5. myArrayAdapter.add(device.getName() + " eoeandroid " + device.getAddress());
  6. //獲取每個設備的名稱和MAC地址添加到數組適配器myArrayAdapter中。
  7. }
  8. }
複製代碼

       三、允許發現 enabling discoverability
       如果需要用戶確認操作,不需要獲取底層藍牙服務實例,可以通過一個Intent來傳遞ACTION_REQUEST_DISCOVERABLE參 數,這裏通過startActivityForResult來強製獲取一個結果,重寫startActivityForResult() 方 法獲取執行結果,返回結果有RESULT_OK和RESULT_CANCELLED分別代表開啟和取消(失敗),當然最簡單的方法是直接執行,示例代碼如下

Java代碼:
  1. Intent cwjIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
  2. cwjIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
  3. startActivity(cwjIntent);
複製代碼

最後更新:2017-04-02 06:52:14

  上一篇:go Oracle 11g r2 下載地址
  下一篇:go 2012年後全球IPv6開始轉換 日本居領先地位