实际上,我怎么债券的设备?(How do I actually BOND a device?)

2019-07-29 18:40发布

我到处看,我觉得这种方法“getBondedDevices()”我的蓝牙适配器。 但是,我有我的平板电脑和其他蓝牙设备就坐在我旁边,我想不出如何实际获得设备展现出来绑定设备的清单上。

Answer 1:

在蓝牙方面,“保税”和“配对”基本上是同义词(正式,配对的过程导致了债券,但大多数人使用它们互换)。 为了让您的设备将被添加到列表中,你必须经过探索的过程,这是一个设备如何搜索和找到另一个,然后中两个在一起。

实际上,你可以从设备设置为用户做到这一点,但如果你正在寻找这样一个如此应用的范围内,你的进程可能会是这个样子:

  1. 注册一个BroadcastReceiver用于BluetoothDevice.ACTION_FOUNDBluetoothAdapter. ACTION_DISCOVERY_FINISHED BluetoothAdapter. ACTION_DISCOVERY_FINISHED
  2. 通过调用开始发现BluetoothAdapter.startDiscovery()
  3. 您的接收器将得到每一个新的设备被发现范围时调用与第一动作,你可以检查它,看它是否是你想要联系的人。 您可以拨打BluetoothAdapter.cancelDiscovery()一旦你发现它不浪费电池任何超过必要的。
  4. 当发现是完整的,如果你还没有取消它,你的接收器将调用与第二个动作; 所以你知道,不要指望任何更多的设备。
  5. 在手设备实例,打开BluetoothSocketconnect() 如果设备尚未粘合,这将启动配对过程,可能会显示一个PIN码某些系统UI。
  6. 一旦配对,您的设备将在保税区的设备列表中显示,直到用户进入设置和删除。
  7. connect()方法实际上也打开插座连接,当它返回,没有抛出异常的两个设备连接。
  8. 现在连接,可以调用getInputStream()getOutputStream()从套接字读取和写入数据。

基本上,你可以检查绑定设备,迅速得到访问外部设备的名单,但在大多数应用中,你会做这和真正的发现的组合,以确保您可以随时连接到远程设备无论用户什么确实。 如果一台设备已经粘合,你只是做步骤5-7进行连接和通信。

欲了解更多信息和示例代码,检查了“发现设备”和“连接设备”的各款Android SDK中的蓝牙指南 。

HTH



Answer 2:

在BluetoothDevice类instace API 19级以上就可以调用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()。



文章来源: How do I actually BOND a device?