Для записи диалогов разработано мобильное приложение для Android и iOS по выгрузке данных через USB с аудиобейджа на смартфон и далее со смартфона на файловый сервер. Аппаратный аудиобейдж представляет из себя диктофон в корпусе бейджика на пиджаке работника. Бейдж заряжается постоянным током при подключении к USB. Доступ к файлам на диктофоне осуществляется через тот же USB-интерфейс — диктофон работает как обычная флешка. Для подключения диктофона к смартфону необходим кабель-переходник, который поддерживает передачу данных, иначе телефон не обнаруживает внешнее запоминающее устройство. Печально, что некоторые производители указывают, что переходник поддерживает передачу данных, хотя это не так. Нам пришлось перебрать несколько кабелей для Android, прежде чем найти рабочий. В первый раз проблема ввела в ступор: то ли диктофон не работает, то ли в смартфоне проблема, раз устройство не обнаруживается. Для iOS переходник подошел сразу.
В практическом применении неплохо бы учесть индивидуальные особенности человека: кому-то проще воспринимать на слух, а кому-то — письменный текст. Поэтому в софт аудиобейджа планируется встроить автоматическое распознавание речи в текст. При прослушивании аудиозаписи в том же окне приложения будет выдаваться транскрипция диалога с разделением реплик разных собеседников.
Приложение создавалось для двух мобильных платформ. Для Android обычно пишут на Java и Kotlin, для iOS — на Swift. Дабы сэкономить ресурсы выбрали MAUI от Microsoft — кроссплатформенный фреймворк разработки мобильных и настольных приложений. Это следующая итерация старого-доброго Xamarin, который больше не поддерживается.
Android
В Multi-platform App UI можно писать как общий код, так и платформозависимый через использование директив #if android
и #if ios
. Также через директивы можно указать версии используемой системы на устройстве. Разработка велась итеративно — сначала для Android, потом для iOS, что привело к некоторым проблемам в дальнейшем, такова кроссплатформенная мобильная разработка. Но пойдем по порядку: прежде всего, необходимо было получить доступ к файлам на диктофоне. Android опять усилил безопасность, и приложению Gran QM необходимо запрашивать доступ к любой папке вне файловой «песочницы». Поэтому точно будет платформозависимый код. В Android открываем файловый менеджер, где можно выбрать папку, к которой монтируется корень флешки аудиобейджа.
Intent intent = new Intent("android.intent.action.OPEN_DOCUMENT_TREE");
Microsoft.Maui.ApplicationModel.Platform.CurrentActivity.StartActivityForResult(intent, 1);
Нам нужно выбрать условие, при котором задается корень. Клик по кнопке в качестве условия был не интересен. Во-первых, при старте приложения можно узнать подключенные USB-устройства через UsbManager — для этого дополнительные права не нужны. Тут же можно отфильтровать устройства по производителям, чтобы предотвратить ложные срабатывания из-за подключения обычной флешки. А во-вторых, активировать окно сразу при подключении устройства: не надо вручную писать циклы прослушивания подключений. Класс BroadcastReceiver
умеет реагировать на создание Intent
. Поэтому создаем класс с наследованием от BroadcastReceiver
и в нем фильтруем события подключения и отключения USB-устройств. После этого захваченное аудио по нажатию на большую кнопку копируется во внутреннюю память приложения, в «песочницу», так сказать.
Затем занялись дизайном. Сделали просто, плоско — как вы любите. Пришлось повозиться с созданием большой кнопки посередине экрана, поскольку похожий элемент управления отсутствует в стандартной библиотеке графических элементов. И, забегая вперед, — под iOS изображения в формате PNG отказывались отображаться. Поэтому в проект сразу добавляем SVG, несмотря на то, что Android справляется с обоими форматами.