java - 如何在每个发现的设备后获取列表?
问题描述
我正在使用此功能扫描 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);
推荐阅读
- ios - 我可以使用 NSInvocation 隐藏或显示子类 UIView 而不重绘它吗?
- c# - Best Way to Monitor Types in DLL Files
- java - 如何在 Android 应用程序中拍摄正方形大小的照片
- javascript - 为什么“这个”突然超出了我的范围?
- c# - Active Directory 中 UserPrincipal 对象的 GUID 属性是否唯一且不可欺骗?
- sql - Rails - 我如何查看我的 SQLite 表?
- java - 给玩家体验
- pandas - statsmodels 混合模型需要很长时间
- rx-java2 - 带有 RXJava2 的 Android 房间;发射器的 onNext() 未正确触发
- android-studio - 即使在安装 haxm 后 AVD 也无法正常工作