我如何实际绑定设备?

时间:2012-06-07 18:09:52

标签: android bluetooth device

无处不在我看到我的蓝牙适配器找到了这个方法“getBondedDevices()”。但是,我有我的平板电脑和另一个蓝牙设备坐在我旁边,我无法弄清楚如何让设备显示在绑定设备列表上。

2 个答案:

答案 0 :(得分:21)

在蓝牙术语中,“保税”和“配对”基本上是同义词(正式来说,配对过程会产生一种联系,但大多数人使用它们是可互换的)。为了将您的设备添加到该列表,您必须完成发现的过程,这是一个设备搜索并找到另一个设备的方式,然后配对这两个设备在一起。

您实际上可以从设备设置中以用户身份执行此操作,但如果您希望在应用程序的上下文中这样做,则您的过程可能看起来像这样:

  1. BroadcastReceiverBluetoothDevice.ACTION_FOUND
  2. 注册BluetoothAdapter. ACTION_DISCOVERY_FINISHED
  3. 致电BluetoothAdapter.startDiscovery()
  4. 开始发现
  5. 每次在范围内找到新设备时,您的接收器将通过第一个动作进行呼叫,您可以检查它以查看它是否是您要连接的设备。一旦您发现BluetoothAdapter.cancelDiscovery()不浪费电池,就可以致电BluetoothSocket
  6. 当发现完成后,如果你没有取消它,你的接收器将被第二个动作调用;所以你知道不要再期待任何设备了。
  7. 手中有设备实例,请打开connect()connect()。如果设备尚未绑定,则会启动配对,并可能会显示PIN码的系统UI。
  8. 配对后,您的设备将显示在绑定设备列表中,直到用户进入设置并将其删除。
  9. getInputStream()方法实际上也会打开套接字链接,当它返回而不抛出异常时,两个设备就会连接起来。
  10. 现已连接,您可以从套接字调用getOutputStream()和{{1}}来读取和写入数据。
  11. 基本上,您可以检查绑定设备列表以快速访问外部设备,但在大多数应用程序中,您将结合使用此设置并进行真正的发现,以确保始终可以连接到远程设备,而不管用户做了什么。如果设备已经绑定,您只需执行步骤5-7进行连接和通信。

    有关更多信息和示例代码,请查看Android SDK Bluetooth Guide的“发现设备”和“正在连接设备”部分。

    HTH

答案 1 :(得分:1)

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