如何在每个发现的设备后获得列表



我使用此函数扫描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()之后获得列表。我该怎么办?

您可以使用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);

最新更新