我如何实际上绑定一个设备?

到处看,我发现这个方法“getBondedDevices()”为我的蓝牙适配器。 不过,我有我的平板电脑和另一个蓝牙设备坐在我旁边,我不知道如何真正让设备显示在绑定设备列表。

Solutions Collecting From Web of "我如何实际上绑定一个设备?"

在蓝牙术语中,“保税”和“配对”基本上是同义词(正式的,配对的过程导致债券,但大多数人使用它们可互换)。 为了将您的设备添加到该列表中,您必须完成发现过程,这是一台设备如何search并查找另一台设备,然后将两者结合在一起。

实际上,您可以以用户的身份从设备设置中执行此操作,但是如果您在应用程序的上下文中查看,则您的过程可能如下所示:

  1. BluetoothDevice.ACTION_FOUNDBluetoothAdapter. ACTION_DISCOVERY_FINISHED注册BroadcastReceiver BluetoothAdapter. ACTION_DISCOVERY_FINISHED BluetoothAdapter. ACTION_DISCOVERY_FINISHED
  2. 通过调用BluetoothAdapter.startDiscovery()开始发现
  3. 每次在范围内find新设备时,您的接收器都会被第一个操作调用,您可以检查它是否是您要连接的设备。 一旦你发现它不会浪费电池,你可以打电话给BluetoothAdapter.cancelDiscovery()
  4. 当发现完成时,如果你还没有取消它,你的接收器将会被第二个动作调用。 所以你不知道更多的设备。
  5. 使用设备实例,打开BluetoothSocketconnect() 。 如果设备尚未绑定,则会启动配对,并可能显示一些系统UI以获取PIN码。
  6. 一旦配对,您的设备将显示在保税设备列表中,直到用户进入设置并将其删除。
  7. connect()方法实际上也打开套接字链接,当它返回而没有抛出exception时,两个设备连接在一起。
  8. 现在连接,你可以调用getInputStream()getOutputStream()从套接字读取和写入数据。

基本上,您可以检查绑定设备列表以快速访问外部设备,但在大多数应用程序中,您将结合使用这一function和真正的发现function,以确保始终可以连接到远程设备,而不pipe用户确实。 如果一个设备已经绑定,您只需要执行步骤5-7来连接和通信。

有关更多信息和示例代码,请查看Android SDK蓝牙指南的“发现设备”和“连接设备”部分。

HTH

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()。