Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 蓝牙发现同一设备10次_Android_Bluetooth_Broadcastreceiver_Android Bluetooth - Fatal编程技术网

Android 蓝牙发现同一设备10次

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倍。我真的不知道为什么这两台设备彼此不一样。可能是

我正在用Android studio开发蓝牙应用程序。今天,我遇到了一个奇怪的问题。 我有3个蓝牙设备,一个智能手机,一个平板电脑,还有另一个设备,但我们并不在乎

我在两台设备上执行相同的应用程序,但智能手机在安卓8.1(API 27)上,平板电脑在安卓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));
        }
    }
};
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方法之外设置适配器并进行测试