大家
这里是新的。
我在比较配对设备的 MAC 地址时遇到问题。如果我的应用程序发现某个 MAC 地址已与其配对,我希望我的应用程序执行某些操作。
这是我的java课程的一部分:
Boolean pair_status = false;
Set<BluetoothDevice> pairedDevices = BTAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
if (device.getAddress() == String.valueOf(R.string.BT_MWAddress)) {
pair_status = true;
}
}
}
这是我的字符串初始化:
<string name="BT_MWAddress">28:A3:91:E6:A1:50</string>
我可以看到该设备已与我的手机配对。
我尝试将条件语句更改为以下内容,但仍然得到相同的结果。
String.valueOf(device.getAddress()) == String.valueOf(R.string.BT_MWAddress)
device.getAddress() == "28:A3:91:E6:A1:50"
String.valueOf(device.getAddress()) == "28:A3:91:E6:A1:50"
String.valueOf(device.getAddress()) == "28:A3:91:E6:A1:50"
我所做的另一项检查是更改我的代码,如下所示以进行故障排除。并且
pair_status
始终更新为 -1
。将 pair_status
发布到 TextView 中。
int pair_status = 0;
Set<BluetoothDevice> pairedDevices = BTAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
if (device.getAddress() == String.valueOf(R.string.BT_MWAddress)) {
pair_status = 1;
} else {
pair_status = -1;
}
}
}
我不熟悉蓝牙配对,但可能与您比较字符串的方式有关。字符串在 java 中是不可变的,因此 == 将比较内存位置。您可以尝试使用 .equals 方法,该方法将比较字符串中的实际字符而不是内存位置。
如果这不起作用,您可以打印 2 个地址吗?