我到处看,我发现这个方法“getBondedDevices()”为我的蓝牙适配器。但是,我的平板电脑和另一个蓝牙设备位于我旁边,我无法弄清楚如何让设备显示在绑定设备列表中。我该如何实际绑定设备?
8
A
回答
20
在蓝牙术语中,“bonded”和“paired”基本上是同义词(官方,配对过程导致债券,但大多数人使用它们可互换)。为了让您的设备被添加到该列表中,您必须通过发现的过程,这是一个设备如何搜索和发现另一个,然后对两个在一起。
实际上,你可以从设备设置为用户做到这一点,但如果你正在寻找这样使一个应用程序的环境中,你的程序可能会是这个样子:
- 注册一个
BroadcastReceiver
为BluetoothDevice.ACTION_FOUND
,并通过调用BluetoothAdapter.startDiscovery()
BluetoothAdapter. ACTION_DISCOVERY_FINISHED
- 开始发现
- 接收机将让每一个新的设备在范围内发现的时间称为与第一动作,你可以检查它,看它是否是你要连接的一个。一旦您发现它不会浪费电池,您可以拨打
BluetoothAdapter.cancelDiscovery()
。 - 当发现完成时,如果你还没有取消它,你的接收器将被第二个动作调用;所以你不知道更多的设备。
- 手头有设备实例,请打开
BluetoothSocket
和connect()
。如果设备尚未绑定,这将启动配对,并可能显示一些系统UI以获取PIN码。 - 配对后,您的设备将显示在保税设备列表中,直到用户进入设置并将其删除。
connect()
方法也实际上打开套接字链接,并且当它返回时没有抛出异常两个设备连接。- 现在连接好了,可以从socket中调用
getInputStream()
和getOutputStream()
来读写数据。
基本上,您可以检查绑定设备列表以快速访问外部设备,但在大多数应用程序中,您将结合使用此发现和真正发现来确保始终可以连接到远程设备,而不管用户做什么。如果一个设备已经绑定,你只需要执行步骤5-7来连接和通信。
有关更多信息和示例代码,请查看Android SDK Bluetooth Guide的“发现设备”和“连接设备”部分。
HTH
0
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()。
相关问题
- 1. 我如何知道设备中imageView的实际尺寸?
- 2. 我该如何实现一个绑定路径,该绑定路径被另一个绑定绑定?
- 3. AccessibilityService不按该文件下面就实际设备
- 4. C sqlite3如何在准备并绑定后打印实际查询?
- 5. MyApp的停在实际设备工作
- 6. 的Android DDMS - 送话费实际设备
- 7. Android - OpenGL - 模拟器vs实际设备
- 8. Android:实际日期和设备日期
- 9. 实际设备中的额外空间
- 10. 如果我更改设备时间,如何获得实际的通用时间?
- 11. 实际的Android设备找不到adb设备
- 12. 我该如何绑定UIButton.isSelectable与RXSwift
- 13. 如何将Android应用程序复制到实际设备?
- 14. 如何获得蓝牙低耗能设备的实际名称?
- 15. 如何获取蓝牙设备的实际名称? C++
- 16. 如何获得设备的实际大小?
- 17. 如何访问实际设备上的数据文件夹
- 18. 如何将设备中的/ dev /实际驾驶
- 19. 如何在实际设备上测试我的iPhone应用程序?
- 20. 我的应用程序在实际设备上遇到问题
- 21. Sqlite无法在实际设备上工作(在我的iPhone上)
- 22. 绑定到Silverlight中实际的UserControl?
- 23. 什么时候绑定实际发生
- 24. 如何设备[iPhone]可以绑定单个外设[蓝牙低功耗设备]
- 25. 我该如何备份MonoTouch?
- 26. 如何实际将Java服务绑定到URL?
- 27. 我该如何实际执行一个StateT monad以及IO?
- 28. 我该如何制作这个脚本实际上发布?
- 29. 我该如何了解给线程的实际时间片?
- 30. 捆绑行为在iOS模拟器和实际设备中有所不同
非常感谢您的帮助。虽然我目前被困在第5步。在我的onReceive方法中,我将找到的设备添加到列表中,但是就我所知。我正在寻找BluetoothSocket构造函数的文档,但还没有找到。我是否简单地创建一个对象,调用其上的“connect()”函数,然后这些设备将出现在我的绑定设备列表中?发现的设备位于ArrayAdapter数据结构中,我无法理解在新对象上调用connect()将为我执行所有操作的想法。 –
JuiCe
如果您阅读我关联的开发指南,您会在连接示例中注意到使用createRfcommSocketToServiceRecord()方法从设备生成套接字对象。 – Devunwired
对不起,我已经浏览了指南,但我仍然有点困惑。我正在使用手机/平板电脑连接到另一个不是手机/平板电脑的蓝牙设备。这可能看起来微不足道,但我无法说服自己我理解它,当我将BluetoothSocket添加到对象时,我的手机/平板电脑充当服务器,对吗?我也很困惑,它说调用'connect()'开始监听设备,但我已经找到了设备并有它的地址。它究竟会在听什么? – JuiCe