蓝牙发现相同的设备10次

时间:2018-05-21 09:09:28

标签: android bluetooth broadcastreceiver android-bluetooth

我正在使用Android工作室开发蓝牙应用程序。今天,我遇到了一个奇怪的问题。 我有3台蓝牙设备,一部智能手机,一台平板电脑和另一台设备,但我们并不关心它。

我在两台设备上执行相同的应用程序,但智能手机在Android 8.1(API 27)上,平板电脑在Android 4.0.4(API 15)上。 在智能手机上,该应用程序运行良好。当我扫描附近的设备时,我得到了4种不同的设备。

但是有问题。在平板电脑上,当我扫描附近的设备时,我的智能手机检测到的每台设备差不多有10次。我真的不知道为什么两个设备都没有发现彼此。也许Android版本是出错的原因。

 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));
        }
    }
};

1 个答案:

答案 0 :(得分:0)

在尝试了很多事情来检测设备是否已经存在于我的ArrayList中之后,我尝试了这段代码:

if (!mDeviceList.contains(scanned_deviceName + "\n" + scanned_macAddress))
            {
                mDeviceList.add(scanned_deviceName + "\n" + scanned_macAddress);
                Log.i("BT", scanned_deviceName + "\n" + scanned_macAddress);
            }

这将检查数组是否包含此字符串: DeviceName DeviceMac@

如果条件为真,则将String添加到ArrayList。

如果它为假(在ArrayList中有另一个具有相同内容的String),则不会将String添加到ArrayList。