我如何获得Android所有已连接蓝牙设备的列表,而不考虑配置文件?
或者,我看到您可以通过BluetoothManager获取特定配置文件的所有连接设备。获取连接的设备。
我想我可以通过ACTION_ACL_CONNECTED/ACTION_ACL_DISCONNECTED监听连接/断开来查看哪些设备连接...似乎容易出错。
但我想知道是否有更简单的方法来获取所有已连接蓝牙设备的列表。
连接设备的最佳方式如下:
>
val btManager = baseContext.getSystemService(BLUETOOTH_SERVICE) as BluetoothManager
val pairedDevices = btManager.adapter.bondedDevices
if (pairedDevices.size > 0) {
for (device in pairedDevices) {
val deviceName = device.name
val macAddress = device.address
val aliasing = device.alias
Log.i(
" pairedDevices ",
"paired device: $deviceName at $macAddress + $aliasing " + isConnected(device)
)
}
}
检查是否连接。
要检查配对设备是否已连接,您需要使用以下方法:
private fun isConnected(device: BluetoothDevice): Boolean {
return try {
val m: Method = device.javaClass.getMethod("isConnected")
m.invoke(device) as Boolean
} catch (e: Exception) {
throw IllegalStateException(e)
}
}
参考此处。
这就是您获得“连接”设备的方式,而不仅仅是配对设备。无需进一步检查它的状态。
val btManager = view.getSystemService(BLUETOOTH_SERVICE) as BluetoothManager
val connectedDevices = btManager.getConnectedDevices(GATT)
要查看完整列表,这是一个两步操作:
要获取当前配对设备的列表并进行迭代,请执行以下操作:
Set<BluetoothDevice> pairedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice d: pairedDevices) {
String deviceName = d.getName();
String macAddress = d.getAddress();
Log.i(LOGTAG, "paired device: " + deviceName + " at " + macAddress);
// do what you need/want this these list items
}
}
发现是一个更复杂的操作。为此,您需要告诉BluetoothAdapter开始扫描/发现。当它找到东西时,它会发出你需要用广播接收器接收的意图。
首先,我们将设置接收器:
private void setupBluetoothReceiver()
{
BroadcastRecevier btReceiver = new BroadcastReciver() {
@Override
public void onReceive(Context context, Intent intent) {
handleBtEvent(context, intent);
}
};
IntentFilter eventFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
// this is not strictly necessary, but you may wish
// to know when the discovery cycle is done as well
eventFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
myContext.registerReceiver(btReceiver, eventFilter);
}
private void handleBtEvent(Context context, Intent intent)
{
String action = intent.getAction();
Log.d(LOGTAG, "action received: " + action);
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.i(LOGTAG, "found device: " + device.getName());
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
Log.d(LOGTAG, "discovery complete");
}
}
现在只剩下告诉BluetoothAdapter开始扫描:
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
// if already scanning ... cancel
if (btAdapter.isDiscovering()) {
btAdapter.cancelDiscovery();
}
btAdapter.startDiscovery();
连接设备 接口说明 用于连接 扫描出来的蓝牙设备。 参数说明 字段 类型 必须? 说明 device RKBLEDevice 是 蓝牙设备 示例代码 Swift: RokidMobileSDK.binder.connect(device: RKBLEDevice) Objc: [RokidMobileSDK.binder connect:device]; 断开设备 接口说明 用于断开已经连接的
连接蓝牙设备 接口说明 接口需传入蓝牙名称(蓝牙address重启后会变) 参数说明 字段 类型 必须? 说明 name String 是 设备名称 举个大栗子 RokidMobileSDK.binder.connectBT(name, new IBTConnectCallBack() { @Override public void onConnectSucceed(BTDevic
我想连接第三方蓝牙设备到我的Android Wear手表(三星Gear Live)。我试图找到留档如何做到这一点,但我没有任何运气。所有的搜索,我似乎都认为我想连接到手机上。 有谁知道一个很好的例子来演示如何将蓝牙心率监视器(或其他设备)连接到Android Wear,以便我在手机不存在时保存历史记录?这可能吗?它是否与从手机/平板电脑上执行相同的协议?
我可以在Android中看到蓝牙设备的两种状态。1、配对2。已连接-<我正在尝试在Android系统中使用当前连接的蓝牙设备。但我只从适配器获得配对设备列表。getBondedDevices() 我需要当前连接的设备。我怎么能得到这个。请有人帮我实现这一点。提前谢谢。
我试图创建一个简单的android应用程序来连接到我的ELM327设备,以获取一些汽车诊断数据。但我无法在我的android手机和我的ELM327设备上设置蓝牙连接。 我的代码很简单,如下所示: } 在mainactivity中,我将首先新建一个Bluetooth类,然后调用Bluetooth.connect(): mBluetooth=新蓝牙();MBluetooth.Connect(); 当我
问题内容: 我正在开发一个使用蓝牙连接到设备并发送/接收数据的应用程序。我正在使用Nexus One手机进行所有测试。 我从手机到任何设备都无法建立SPP(串行端口)连接。不过,我 已经 能够从一个设备(我的笔记本电脑)连接到使用Mac相当于腻子我的手机(唯一的例外是从市场上的“蓝牙文件传输”应用程序似乎是工作,但我不认为使用RFCOM / SPP …)。 我在LogCat日志中始终看到此消息: