无处不在我看到我的蓝牙适配器找到了这个方法“getBondedDevices()”。但是,我有我的平板电脑和另一个蓝牙设备坐在我旁边,我无法弄清楚如何让设备显示在绑定设备列表上。
答案 0 :(得分:21)
在蓝牙术语中,“保税”和“配对”基本上是同义词(正式来说,配对过程会产生一种联系,但大多数人使用它们是可互换的)。为了将您的设备添加到该列表,您必须完成发现的过程,这是一个设备搜索并找到另一个设备的方式,然后配对这两个设备在一起。
您实际上可以从设备设置中以用户身份执行此操作,但如果您希望在应用程序的上下文中这样做,则您的过程可能看起来像这样:
BroadcastReceiver
和BluetoothDevice.ACTION_FOUND
BluetoothAdapter. ACTION_DISCOVERY_FINISHED
BluetoothAdapter.startDiscovery()
BluetoothAdapter.cancelDiscovery()
不浪费电池,就可以致电BluetoothSocket
。connect()
和connect()
。如果设备尚未绑定,则会启动配对,并可能会显示PIN码的系统UI。getInputStream()
方法实际上也会打开套接字链接,当它返回而不抛出异常时,两个设备就会连接起来。getOutputStream()
和{{1}}来读取和写入数据。基本上,您可以检查绑定设备列表以快速访问外部设备,但在大多数应用程序中,您将结合使用此设置并进行真正的发现,以确保始终可以连接到远程设备,而不管用户做了什么。如果设备已经绑定,您只需执行步骤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()即可。