在我所见的任何地方,我都为我的蓝牙适配器找到了这种方法“getBondedDevices()”。但是,我有我的平板电脑和另一个蓝牙设备坐在我旁边,我不知道如何真正让设备显示在绑定设备列表中。
问问题
19159 次
2 回答
27
在蓝牙术语中,“绑定”和“配对”基本上是同义词(官方称,配对过程会导致绑定,但大多数人可以互换使用它们)。为了将您的设备添加到该列表中,您必须完成Discovery过程,这是一个设备搜索和找到另一个设备的方式,然后将两者配对。
您实际上可以作为用户从设备设置中执行此操作,但如果您希望在应用程序的上下文中这样做,您的过程可能看起来像这样:
- 注册一个
BroadcastReceiver
forBluetoothDevice.ACTION_FOUND
和BluetoothAdapter. ACTION_DISCOVERY_FINISHED
- 通过调用开始发现
BluetoothAdapter.startDiscovery()
- 每次在范围内发现新设备时,您的接收器都会通过第一个操作被调用,您可以检查它以查看它是否是您想要连接的设备。
BluetoothAdapter.cancelDiscovery()
一旦你发现它不会浪费不必要的电池,你就可以打电话。 - 发现完成后,如果您没有取消它,您的接收器将通过第二个操作被调用;所以你知道不要期待更多的设备。
- 手持设备实例,打开一个
BluetoothSocket
和connect()
。如果设备尚未绑定,这将启动配对并可能会显示一些系统 UI 以获取 PIN 码。 - 配对后,您的设备将显示在绑定的设备列表中,直到用户进入设置并将其删除。
- 该
connect()
方法实际上还打开了套接字链接,当它返回而没有抛出异常时,两个设备已连接。 - 现在连接好了,就可以调用
getInputStream()
并getOutputStream()
从socket中读写数据了。
基本上,您可以检查绑定设备列表以快速访问外部设备,但在大多数应用程序中,您将结合使用此功能和真正的发现,以确保无论用户如何,您都可以始终连接到远程设备做。如果设备已经绑定,您只需执行步骤 5-7 即可连接和通信。
有关更多信息和示例代码,请查看Android SDK 蓝牙指南的“发现设备”和“连接设备”部分。
高温高压
于 2012-06-07T19:00:37.703 回答
3
API 级别 19 及以上您可以在要连接的 BluetoothDevice 实例上调用 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()。
于 2017-09-22T06:13:50.577 回答