У меня есть несколько прослушивателей, которые возвращают значения из поиска устройства ONVIF.
У меня есть код, который находит устройства ONVIF (IP-адреса), а затем выполняет цикл for для каждого устройства, чтобы перебрать список устройств.,Для каждого устройства я создаю прослушиватель для устройства, чтобы получить поток медиа-URL.(поэтому, если есть две камеры ONVIF, мне нужно посмотреть, какой URL у каждой камеры)
Из-за многопоточности я часто получаю возвращаемые значения от этих слушателей одновременно (в этом случаеинформация URL-адреса мультимедиа)
Мне нужно иметь возможность обновить один ArrayList с этими значениями и знать, когда все устройства вернули значения из прослушивателей, которые я создал.
Я запутался, еслиЕсть ли способ использовать синхронизированный тип для этого?
Я просмотрел несколько уроков о том, как сделать слушателя «безопасным для потока», но я не могу найти никого, кто бы создавал несколько одинаковых слушателей для отслеживания результатов.
Вот код.«AppendResultsText» - функция, вызываемая после запуска слушателя.Строка uri - это значение, которое мне нужно добавить в массив (что я и делаю, но не надежно)
onvifManager.getMediaProfiles(device1, new OnvifMediaProfilesListener() {
@Override
public void onMediaProfilesReceived(@Nonnullbe.teletask.onvif.models.OnvifDevice device,
@Nonnull List<OnvifMediaProfile> mediaProfiles) {
onvifManager.getMediaStreams(device, mediaProfiles.get(0), new OnvifMediaStreamURIListener() {
@Override
public void onMediaStreamURIReceived(@Nonnull be.teletask.onvif.models.OnvifDevice device,
@Nonnull OnvifMediaProfile profile, @Nonnull String uri) {
appendResultsText(uri, nThisDeviceTrack, nDeviceTotal, lShowNotifications_x, lVxgViewRefresh_x );
}
});
}
});
Привет RootSoft на https://github.com/RootSoft/ONVIF-Java для потрясающей библиотеки обнаружения ONVIF!
В качестве примечания, он работает как IntentService, поэтому он находится за пределами потоков пользовательского интерфейса.