Когда я пытаюсь отправить объект с несколькими изображениями (преобразованными в строку с использованием Base64) в качестве типа STREAM, из метода onPayloadTransferUpdate() я вижу результат «Ошибка», и устройства (проверено только при подключении 2 устройств) автоматически отключаются после что. Подключения Google Nearby не подходят для отправки больших байтов?
Подключения Google Nearby - невозможно передавать большие байты между двумя устройствами
Ответы (2)
Соседние соединения должны быть в состоянии справиться с этим. Для полезной нагрузки STREAM нет явного ограничения размера.
Я бы предложил разделить байты на части (например, отправить пару КБ за раз) и посмотреть, поможет ли это. Вы можете попасть в странные ситуации, когда отправляете целые файлы сразу, потому что он дважды загружает байты в память (один раз внутри вашего приложения и один раз внутри процесса Nearby), что может вызвать ошибки нехватки памяти. Binder, уровень межпроцессного взаимодействия в Android, также имеет ограниченный буфер для отправки данных между процессами.
Вы также можете сохранить его как временный файл и отправить в качестве полезной нагрузки FILE, и в этом случае мы выполним фрагментацию для вас.
Отказ от ответственности: я работаю над Nearby Connections.
1) Вам не нужно кодировать данные с помощью Base64 ради Nearby Connections — ваш STREAM может иметь необработанные двоичные данные, и это будет работать нормально.
2) Насколько велики эти данные, которые вы отправляете, и с каким смещением в байтах (это можно увидеть в PayloadTransferUpdate, который вы получаете с помощью Status.ERROR), происходит сбой? Похоже, ваши устройства просто отключаются.
3) Какую стратегию вы используете?
4) Если у вас все еще продолжается обнаружение (т. е. вы не вызвали stopDiscovery()), попробуйте остановить его, а затем отправить полезную нагрузку — обнаружение — это тяжеловесная операция, которая может затруднить надежное поддержание соединений между устройствами в течение длительных интервалов.