Android 蓝牙发现同一设备10次
我正在用Android studio开发蓝牙应用程序。今天,我遇到了一个奇怪的问题。 我有3个蓝牙设备,一个智能手机,一个平板电脑,还有另一个设备,但我们并不在乎 我在两台设备上执行相同的应用程序,但智能手机在安卓8.1(API 27)上,平板电脑在安卓4.0.4(API 15)上。 在智能手机上,该应用程序运行良好。当我扫描附近的设备时,我得到4个不同的设备 但问题是。在平板电脑上,当我扫描附近的设备时,我的智能手机检测到的每个设备几乎都是10倍。我真的不知道为什么这两台设备彼此不一样。可能是Android版本导致了这个错误Android 蓝牙发现同一设备10次,android,bluetooth,broadcastreceiver,android-bluetooth,Android,Bluetooth,Broadcastreceiver,Android Bluetooth,我正在用Android studio开发蓝牙应用程序。今天,我遇到了一个奇怪的问题。 我有3个蓝牙设备,一个智能手机,一个平板电脑,还有另一个设备,但我们并不在乎 我在两台设备上执行相同的应用程序,但智能手机在安卓8.1(API 27)上,平板电脑在安卓4.0.4(API 15)上。 在智能手机上,该应用程序运行良好。当我扫描附近的设备时,我得到4个不同的设备 但问题是。在平板电脑上,当我扫描附近的设备时,我的智能手机检测到的每个设备几乎都是10倍。我真的不知道为什么这两台设备彼此不一样。可能是
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) { // discover devices
Scanned_devices = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
scanned_deviceName = Scanned_devices.getName();
scanned_macAddress = Scanned_devices.getAddress();
mDeviceList.add(scanned_deviceName + "\n" + scanned_macAddress);
Log.i("BT", scanned_deviceName + "\n" + scanned_macAddress);
Set<BluetoothDevice> pairedDevices = blueAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
try {
if (scanned_deviceName.equals(device.getName()) || scanned_macAddress.equals(device.getAddress())) {
Toast.makeText(getApplicationContext(), "Already Paired", Toast.LENGTH_LONG).show();
mDeviceList.remove(scanned_deviceName + "\n" + scanned_macAddress);
} //else {
//mDeviceList.add(scanned_deviceName + "\n" + scanned_macAddress);
//Log.i("BT", scanned_deviceName + "\n" + scanned_macAddress);
//}
}catch(Exception e)
{
Log.d("tag", "not working");
Toast.makeText(getApplicationContext(), "not working..", Toast.LENGTH_LONG).show();
}
}
}
Scanned_devices_ListView.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, mDeviceList));
}
}
};
private final BroadcastReceiver mReceiver=new BroadcastReceiver(){
公共void onReceive(上下文、意图){
String action=intent.getAction();
if(BluetoothDevice.ACTION_FOUND.equals(ACTION)){//discover devices
扫描的\u设备=intent.getParcelableExtra(BluetoothDevice.EXTRA\u设备);
scanned_deviceName=已扫描的_设备。getName();
scanned_macAddress=已扫描的_设备。getAddress();
mDeviceList.add(已扫描的\u设备名称+“\n”+已扫描的\u macAddress);
Log.i(“BT”,已扫描设备名称+“\n”+已扫描设备地址);
Set pairedDevices=blueAdapter.getBondedDevices();
如果(pairedDevices.size()>0){
用于(蓝牙设备:pairedDevices){
试一试{
if(已扫描的_deviceName.equals(device.getName())| |已扫描的_macAddress.equals(device.getAddress())){
Toast.makeText(getApplicationContext(),“已配对”,Toast.LENGTH_LONG.show();
mDeviceList.remove(已扫描的\u deviceName+“\n”+已扫描的\u macAddress);
}//否则{
//mDeviceList.add(已扫描的\u设备名称+“\n”+已扫描的\u macAddress);
//Log.i(“BT”,已扫描设备名称+“\n”+已扫描设备地址);
//}
}捕获(例外e)
{
日志d(“标签”,“不工作”);
Toast.makeText(getApplicationContext(),“不工作…”,Toast.LENGTH_LONG.show();
}
}
}
已扫描的_devices_ListView.setAdapter(新的ArrayAdapter(context,android.R.layout.simple_list_item_1,mDeviceList));
}
}
};
在尝试了很多方法来检测设备是否已经存在于我的ArrayList中之后,我尝试了以下代码:
if (!mDeviceList.contains(scanned_deviceName + "\n" + scanned_macAddress))
{
mDeviceList.add(scanned_deviceName + "\n" + scanned_macAddress);
Log.i("BT", scanned_deviceName + "\n" + scanned_macAddress);
}
这将检查数组是否包含以下字符串:
设备名称
DeviceMac@
如果条件为true,则字符串将添加到ArrayList
如果为false(ArrayList中有另一个具有相同内容的字符串),则不会将该字符串添加到ArrayList。尝试在onReceive方法之外设置适配器并进行测试