首页 > 解决方案 > 如何在每个发现的设备后获取列表?

问题描述

我正在使用此功能扫描 BLE 设备并将其保存到列表中。

    public BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(final BluetoothDevice device, final int rssi, byte[] scanRecord) {
        act.runOnUiThread(new Runnable() {

            public void run() {
                if(aDevices.size() > 0) {

                    boolean isNewItem = true;

                    for (int i = 0; i < aDevices.size(); i++) {
                        if (aDevices.get(i).getMacAddress().equals(device.getAddress())) {
                            isNewItem = false;
                        }
                    }
                    if(isNewItem) {
                        aDevices.add(new BluetoothLE(device.getName(), device.getAddress(), rssi, device));
                    }
                }else{
                    aDevices.add(new BluetoothLE(device.getName(), device.getAddress(), rssi, device));
                }
                
            }
        });

    }
    
};

并使用此函数获取列表:

        public ArrayList<BluetoothLE> getListDevices(){
    return aDevices;
}

但是,我想在每个 aDevices.add()线程内部获取列表。我应该怎么办?

标签: javaandroidbluetooth-lowenergy

解决方案


您可以使用 ObservableArrayList 的实例并为其提供 OnListChangedCallback 的实现,该实现会在每次更改时收到通知,而不是您当前使用的 ArrayList。

public class MyCallback extends ObservableList.OnListChangedCallback<ObservableList> {

public void onChanged(ObservableList sender) {
    Log.i(tag, "list changed");
}

public void onItemRangeChanged(ObservableList sender, int positionStart, int itemCount) {
    Log.i(tag, "item range changed");
}

public void onItemRangeInserted(ObservableList sender, int positionStart, int itemCount) {
    Log.i(tag, "item range inserted");
}

public void onItemRangeMoved(ObservableList sender, int fromPosition, int toPosition, int itemCount)  {
    Log.i(tag, "item range moved");
}

public void onItemRangeRemoved(ObservableList sender, int positionStart, int itemCount)  {
    Log.i(tag, "item range removed");
}
}


ObservableArrayList list = new ObservableArrayList();
list.addOnListChangedCallback(new MyCallback());
...
list.add(element);

推荐阅读