我到處看,我發現這個方法「getBondedDevices()」爲我的藍牙適配器。但是,我的平板電腦和另一個藍牙設備位於我旁邊,我無法弄清楚如何讓設備顯示在綁定設備列表中。我該如何實際綁定設備?
8
A
回答
20
在藍牙術語中,「bonded」和「paired」基本上是同義詞(官方,配對過程導致債券,但大多數人使用它們可互換)。爲了讓您的設備被添加到該列表中,您必須通過發現的過程,這是一個設備如何搜索和發現另一個,然後對兩個在一起。
實際上,你可以從設備設置爲用戶做到這一點,但如果你正在尋找這樣使一個應用程序的環境中,你的程序可能會是這個樣子:
- 註冊一個
BroadcastReceiver
爲BluetoothDevice.ACTION_FOUND
,並通過調用BluetoothAdapter.startDiscovery()
BluetoothAdapter. ACTION_DISCOVERY_FINISHED
- 開始發現
- 接收機將讓每一個新的設備在範圍內發現的時間稱爲與第一動作,你可以檢查它,看它是否是你要連接的一個。一旦您發現它不會浪費電池,您可以撥打
BluetoothAdapter.cancelDiscovery()
。 - 當發現完成時,如果你還沒有取消它,你的接收器將被第二個動作調用;所以你不知道更多的設備。
- 手頭有設備實例,請打開
BluetoothSocket
和connect()
。如果設備尚未綁定,這將啓動配對,並可能顯示一些系統UI以獲取PIN碼。 - 配對後,您的設備將顯示在保稅設備列表中,直到用戶進入設置並將其刪除。
connect()
方法也實際上打開套接字鏈接,並且當它返回時沒有拋出異常兩個設備連接。- 現在連接好了,可以從socket中調用
getInputStream()
和getOutputStream()
來讀寫數據。
基本上,您可以檢查綁定設備列表以快速訪問外部設備,但在大多數應用程序中,您將結合使用此發現和真正發現來確保始終可以連接到遠程設備,而不管用戶做什麼。如果一個設備已經綁定,你只需要執行步驟5-7來連接和通信。
有關更多信息和示例代碼,請查看Android SDK Bluetooth Guide的「發現設備」和「連接設備」部分。
HTH
0
API級別19和BluetoothDevice類instace上面你可以調用createBond()到要連接。 您將需要一些權限,以發現並列出可見的設備
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
代碼,以發現並列出設備:
bluetoothFilter.addAction(BluetoothDevice.ACTION_FOUND);
bluetoothFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
bluetoothFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(bluetoothReceiver, bluetoothFilter);
private BroadcastReceiver bluetoothReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
Log.e("bluetoothReceiver", "ACTION_FOUND");
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
devicesList.add((device.getName() != null ? device.getName() : device.getAddress()));
bluetoothDevicesAdapter.notifyDataSetChanged();
} else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
Log.e("bluetoothReceiver", "ACTION_DISCOVERY_STARTED");
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
Log.e("bluetoothReceiver", "ACTION_DISCOVERY_FINISHED");
getActivity().unregisterReceiver(bluetoothReceiver);
}
}
};
選擇的設備上只需撥打createBond()。
相關問題
- 1. 實際設備
- 2. Html.DropdownList如何實際綁定?
- 3. 我如何知道設備中imageView的實際尺寸?
- 4. 如何確定iOS設備的方向*實際*更改?
- 5. 我該如何實現一個綁定路徑,該綁定路徑被另一個綁定綁定?
- 6. 確實iOS設備模擬器使用實際設備屬性
- 7. AccessibilityService不按該文件下面就實際設備
- 8. C sqlite3如何在準備並綁定後打印實際查詢?
- 9. LocationManager在實際設備上不工作
- 10. 的Android DDMS - 送話費實際設備
- 11. ImageView的實際設備沒有顯示
- 12. Android - OpenGL - 模擬器vs實際設備
- 13. 實際設備上的iOS JSON問題
- 14. Android:實際日期和設備日期
- 15. 插入實際設備的Kinect仿真
- 16. 實際設備中的額外空間
- 17. MyApp的停在實際設備工作
- 18. screen.width與設備實際分辨率
- 19. 如果我更改設備時間,如何獲得實際的通用時間?
- 20. 實際的Android設備找不到adb設備
- 21. CMMotionManager:設備校準在實際設備上不起作用
- 22. 我該如何綁定WinJS.UI.AppBarCommand的標籤?
- 23. 我該如何綁定UIButton.isSelectable與RXSwift
- 24. 如何訪問實際設備上的數據文件夾
- 25. getUserMedia - 如何檢測設備實際上是否有攝像頭
- 26. 如何獲得設備的實際大小?
- 27. 如何獲得藍牙低耗能設備的實際名稱?
- 28. 如何將Android應用程序複製到實際設備?
- 29. ACTION_BATTERY_CHANGEDs在實際設備中發送的頻率如何?
- 30. 如何在仿真器和實際設備上升級SystemUI.apk
非常感謝您的幫助。雖然我目前被困在第5步。在我的onReceive方法中,我將找到的設備添加到列表中,但是就我所知。我正在尋找BluetoothSocket構造函數的文檔,但還沒有找到。我是否簡單地創建一個對象,調用其上的「connect()」函數,然後這些設備將出現在我的綁定設備列表中?發現的設備位於ArrayAdapter數據結構中,我無法理解在新對象上調用connect()將爲我執行所有操作的想法。 –
JuiCe
如果您閱讀我關聯的開發指南,您會在連接示例中注意到使用createRfcommSocketToServiceRecord()方法從設備生成套接字對象。 – Devunwired
對不起,我已經瀏覽了指南,但我仍然有點困惑。我正在使用手機/平板電腦連接到另一個不是手機/平板電腦的藍牙設備。這可能看起來微不足道,但我無法說服自己我理解它,當我將BluetoothSocket添加到對象時,我的手機/平板電腦充當服務器,對嗎?我也很困惑,它說調用'connect()'開始監聽設備,但我已經找到了設備並有它的地址。它究竟會在聽什麼? – JuiCe