Android 我如何实际绑定设备?
我到处都能找到蓝牙适配器的“getBondedDevices()”方法。然而,我旁边有我的平板电脑和另一个蓝牙设备,我不知道如何让该设备显示在绑定设备列表中 在蓝牙术语中,“绑定”和“配对”基本上是同义词(官方上,配对过程会导致绑定,但大多数人使用它们是可互换的)。为了将您的设备添加到该列表中,您必须经历查找过程,这是一个设备搜索和查找另一个设备的过程,然后将这两个设备配对 实际上,您可以作为用户从设备设置中执行此操作,但如果您在应用程序的上下文中这样做,则您的过程可能如下所示:Android 我如何实际绑定设备?,android,bluetooth,device,Android,Bluetooth,Device,我到处都能找到蓝牙适配器的“getBondedDevices()”方法。然而,我旁边有我的平板电脑和另一个蓝牙设备,我不知道如何让该设备显示在绑定设备列表中 在蓝牙术语中,“绑定”和“配对”基本上是同义词(官方上,配对过程会导致绑定,但大多数人使用它们是可互换的)。为了将您的设备添加到该列表中,您必须经历查找过程,这是一个设备搜索和查找另一个设备的过程,然后将这两个设备配对 实际上,您可以作为用户从设备设置中执行此操作,但如果您在应用程序的上下文中这样做,则您的过程可能如下所示: 为Blueto
Bluetooth设备注册BroadcastReceiver
。找到操作和Bluetooth适配器。操作\u发现\u已完成
BluetoothAdapter.startDiscovery()
BluetoothAdapter.cancelDiscovery()
,一旦您发现它不会过度浪费电池BluetoothSocket
和connect()
。如果设备尚未绑定,这将启动配对,并可能显示PIN码的某些系统UIconnect()
方法实际上也会打开套接字链接,当它返回而不引发异常时,两个设备就连接起来了getInputStream()
和getOutputStream()
,以读取和写入数据HTHAPI级别19及以上,您可以在要连接的蓝牙设备Instance上调用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"/>
只需在所选设备上调用createBond()。非常感谢您的帮助。但我目前仍停留在第5步。在我的onReceive方法中,我将找到的设备添加到一个列表中,但这就是我所能得到的。我正在寻找BluetoothSocket构造函数上的文档,但尚未找到任何文档。我是否只需创建一个对象,调用其上的“connect()”函数,然后这些设备就会出现在我的绑定设备列表中?找到的设备位于ArrayAdapter数据结构中,我很难理解在新对象上调用connect()会为我做任何事情。如果您阅读了我链接到的开发指南,您会在连接示例中注意到方法
createrFComSocketToServiceRecord()
用于从设备上生成套接字对象。是的,对不起,我已经阅读了指南,但还是有点困惑。我正在使用手机/平板电脑连接到另一个不是手机/平板电脑的蓝牙设备。这可能看起来很琐碎,但我无法说服自己我理解它,当我向我的对象添加BluetoothSocket时,我的手机/平板电脑充当服务器,对吗?我也对它说调用“connect()”开始监听设备感到困惑,但我已经找到了设备并有了它的地址。它到底在监听什么?这取决于嵌入式设备的设置方式,但大多数嵌入式蓝牙调制解调器默认接受传入连接(使其成为服务器)。Android设备将是一个客户端,调用connect()
,如指南中的“作为客户端连接”示例所示。当connect()
成功返回时,您可以使用getInputStream()
和getOutputStream()
开始传输数据。您可以从getBondedDevices()
获得Bluetooth设备或者在发现该设备时,在发现过程中通过广播接收器
回调。在后一种情况下,设备本身在Intent
中作为额外信息传递回onReceive()
方法。
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);
}
}
};