Внешние компоненты «Барометр» и «Распознавание речи» для мобильного приложения под андроид

02.06.18

Разработка - Разработка внешних компонент

Несколько замечаний с примерами кода о разработке внешних компонент для мобильных приложений

Скачать файлы

Наименование Файл Версия Размер
Распознавание речи
.zip 74,57Mb
20
.zip 1.0.0 74,57Mb 20 Скачать
Барометр
.zip 1,30Mb
4
.zip 1.0.1 1,30Mb 4 Скачать

Истек год с момента выхода технологии внешних компонент для мобильных приложений (далее ТВК). Это довольно большой срок в IT отрасли, который дает право подвести некоторые итоги, подчеркнуть достоинства и указать на недостатки. Однако, если посмотреть на количество открытых приложений, написанных с использованием этой технологии, например, в библиотеке Инфостарта, то нам для их подсчета хватит пальцев одной руки. Причины тому очевидны: сложность, неудобство разработки, а знания, которые необходимы, находятся далеко от того, чем занимается обычный 1С разработчик. Но есть и второй подводный камень – искусственные ограничения, установленные 1С. С одной стороны, выпустив мобильную платформу, 1С поставила грандиозную задачу унификации мобильной разработки для всех ОС. Программист мобильных приложений должен знать 1С и ничего больше. Даже в другом универсальном решении - Xamarin при обращении к однотипным устройствам аппарата, например, сенсорам, приходится программировать, учитывая особенности конкретной операционной системы. В мобильной платформе не так – позиционирование в пространстве, работа с мультимедиа и другие операции выполняются одинаково. Но эта стандартизация ограничена мобильной платформой 1С. Расширить наши возможность может ТВК, но препятствия, которые следует преодолеть, значительно превзойдут сложность разработки на «родных» языках мобильных ОС (Java/C#/Objective-C).

Рассмотрим ограничения, с которыми сталкивается разработчик внешних компонент под андроид. Как было сказано, иногда они искусственные. Например, 1С закрыла доступ из компоненты к визуальной части интерфейса приложения. Программист не может вывести свою собственную форму (Activity) на экран. Кто изучал пример внешней компоненты для андроид от 1С догадается, что для этого управляемый код компоненты выполняется в отдельном потоке (базовый java класс наследуется от Runnable). Но побочным эффектом такой архитектуры является то, что мы не можем запускать объекты, требующие основного потока приложения для своего функционирования. Один из способов обхода этого ограничения представлен в компоненте «Распознавание речи». В андроиде доступ к сервисам распознавания предоставляет класс SpeechRecognizer. Метод-фабрика его создания – createSpeechRecognizer должен вызываться на базе контекста основного потока приложения. Поэтому приложение состоит из двух частей: собственно внешней компоненты, оформленной по стандарту 1С как устройство ввода и отдельного приложения, которое запускается компонентой и отправляет оповещения (broadcast). Оповещение принимает внешняя компонента и генерирует внешнее событие в 1С. Получение оповещений и отправка намерений (intent) – функциональность с которой ТВК прекрасно справляется. Пример кода стандартный:

BroadcastReceiver mReceiver = new BroadcastReceiver()
{
	@Override
	public void onReceive(Context context,Intent intent)
	{
		// Обработка сообщения
	}
};

Но перед регистрацией получателя обязательно программируем фильтрацию:

final Intent intent = mActivity.getPackageManager().getLaunchIntentForPackage(PackageName);
intent.putExtra(“SomeParameter”,mParameter);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mActivity.startActivity(intent);

Рассмотрим другой пример, когда из-за несовершенства архитектуры ТВК приходится писать дополнительное ПО – компонента для считывания ввода с физической клавиатуры. Ею снабжены многие промышленные сканера. Если бы мы создавали отдельное приложение для андроид, задача не представляла бы особой трудности. Активность унаследована от KeyEvent.Callback, поэтому необходимо всего лишь переопределить обработчик onKeyDown. Но у нас нет доступа к основному контексту мобильного приложения 1С. Вторым подходом к решению задачи будет напрямую читать из /dev/input/event2 (файл клавиатурного ввода в linux). Если это было бы возможно, мы получили бы хорошее решение только на C++ без дополнительных связок с управляемым кодом. Но, к сожалению, в андроиде прямой доступ к устройствам ввода запрещен. Выход – устанавливать такую компоненту только на устройства с разблокированным пользователем root или писать отдельный драйвер тоже с root правами.

Второе приложение к статье – «Барометр» представляет собой пример обращения к сенсору. Следует отметить, что из-за отсутствия в классе компоненты событий onResume и onPause, ответственность на включение и отключение устройства ложится на программиста 1С. Если мобильное приложение перейдет в спящий режим, а сенсор не будет отключен, оно может сильнее разряжать батарею. Это же замечание верно для оповещений (Broadcast). Многие сенсоры, реализующими интерфейс SensorEventListener, а также сканер отпечатка пальца можно запрограммировать через ТВК. Приведу почти полностью класс компоненты для измерения давления:

public class Pressure implements Runnable, SensorEventListener {

  private Activity m_Activity;
  private SensorManager m_Manager;
  private Sensor m_Sensor;

  public void run()
  {
// подключение so-файла с нативной частью кода
  }

  public void show()
  {
    m_Activity.runOnUiThread(this);
    m_Manager = (SensorManager)m_Activity.getSystemService(Context.SENSOR_SERVICE);
    if (m_Manager!=null)
      m_Sensor = m_Manager.getDefaultSensor(Sensor.TYPE_PRESSURE);
  }

  @Override
  public final void onAccuracyChanged(Sensor sensor, int accuracy)
  {
  }

  @Override
  public final void onSensorChanged(SensorEvent event)
  {
    if (event.values.length > 0)
    {
// отправка сигнала в нативную часть компоненты (а затем в 1С)
    }
  }

  public Pressure(Activity activity)
  {
    m_Activity = activity;
  }

  public boolean startListen()
  {
    if (m_Sensor!=null)
    {
      m_Manager.registerListener(this,m_Sensor,SensorManager.SENSOR_DELAY_NORMAL);
      return true;
    }
    else
      return false;
  }

  public void stopListen()
  {
    if (m_Sensor!=null)
      m_Manager.unregisterListener(this);
  }
}

Имея «нулевой» опыт разработки под iOS, в этой статье я ничего не могу сказать о компонентах для этой системы, возможно кто-то из членов сообщества поделится своим опытом в этой сфере. А вот о создании компонент для windows phone поговорил бы с удовольствием, но к сожалению, 1С здесь потерпело полное поражение.

Мобильная платформа для winphone, вышедшая на рубеже 2015/2016 года, была уже тогда устаревшей, так как почти одновременно вышла мобильная windows 10. Эти две системы, имея общее название, по сути являются принципиально различными. Все новые датчики и устройства телефонов на windows 10 программируются с помощью universal windows platform (UWP). Подсистема windows runtime (WinRT), являющаяся базой в windows 8, в windows 10 оставлена для совместимости и не имеет API для новых функций. (Знающие архитектуру winphone могут поставить это утверждение под сомнение, спросив, каким же образом сама 1С написала сканирование штрихкодов, которое работает на windows 10 и не работало на windows 8? Ответ находится при изучении состава платформы для winphone – была использована сторонняя библиотека ZXing). В windows phone невозможно по аналогии с андроид написать отдельное приложение или службу, с которого 1С будет получать данные: в этой ОС нет межпроцессного взаимодействия. Таким образом, мы можем, глядя из песочницы 1С, только облизываться на устройства телефона под управлением windows phone 10: барометр, сканер отпечатка пальца, сканер сетчатки глаза, не имея к ним доступа.

Допустим, мы хотим написать компоненту только для windows phone 8. Но и в этом случае столкнемся с практически непреодолимыми препятствиями. В документации по развертыванию мобильных приложений 1С на веб-сервере сказано, что внешние компоненты для winphone не устанавливаются на мобильной платформе 1С для тестирования. То есть, отсутствуют пути для их отладки. В андроиде можно переключить телефон в режим разработчика и устанавливать любое число раз на него скомпонованное приложение. Такой режим есть и у аппаратов на windows phone 10, но он не позволяет устанавливать тестовые приложения на WinRT. Таким образом, внешние компоненты для winphone 8 следует писать сразу без ошибок. Бурные овации таким разработчикам!

Универсальность внешних компонент вряд ли достижима, хотя 1С и старается создать какой-то стандарт. Даже физически разные мобильные устройства сильно отличаются, не говоря уж о программном обеспечении. Представим себе организацию, которая использует мобильное приложение для приемки товара, которое устанавливается на ТСД под управлением андроид, имеющие лазерный сканер, на планшеты под windows 8 с присоединенными сканерами через usb и настроенными на клавиатурный вывод. Для ТСД на андроиде написана внешняя компонента, на windows она не нужна. Но сборщик мобильных приложений откажется формировать установочные файлы и скажет, что отсутствует компонента для windows. Разработчики вынуждены либо формировать отдельные cf для разных ОС либо создать компоненту-пустышку для windows, чтобы удовлетворить требованиям 1С.

О примерах к статье

В архивах находятся файлы конфигураций и справочные текстовые файлы о развертывании и документация по компонентам. Для запуска на устройствах их необходимо собрать сборщиком мобильных приложений. Компоненты тестировались на релизе мобильной платформы 8.3.11.57.

внешняя компонента андроид

См. также

"Штрихкод-информер" - мобильный ТСД и прайс-чекер в смартфоне

Мобильная разработка Сканер штрих-кода Терминал сбора данных Управляемые формы Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Сбор заказов, инвентаризация, проверка ценников, просмотр полной информации об остатках и ценах со смартфона Онлайн. Отправка данных со смартфона выполняется либо напрямую в открытую форму документа, отсканировав QR-код, либо в общую корзину учетной системы, не подходя к компьютеру. Кассир или оператор сможет просмотреть список присланных данных и загрузить в любую форму, поддерживающую работу с ТСД. Для работы с мобильным приложением требуется опубликовать HTTP-сервис из поставляемого расширения.

2880 руб.

03.12.2018    54621    137    102    

161

SALE! 25%

Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 9900 руб.

27.12.2021    33283    80    157    

174

"Мобильный ТСД" - инвентаризация и сбор штрихкодов для iOS и Android

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Платформа 1С v8.3 Мобильная платформа 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Простой мобильный терминал сбора данных для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

2000 руб.

22.04.2019    91947    511    186    

293

Медиадисплей. Рекламный информационный монитор для покупателя.

Разработка внешних компонент POS терминал Рабочее место Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Рестораны, кафе и фаст-фуд Реклама, PR и маркетинг Управленческий учет Платные (руб)

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    52105    34    69    

43

Магазин 15 - приемка товара по штрихкодам или инвентаризация в торговом зале

Логистика, склад и ТМЦ Мобильная разработка Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Специализированное программное обеспечение для мобильных устройств со встроенным сканером штрихкодов. Позволяет быстро автоматизировать, оптимизировать рабочие места и бизнес процессы по учету товара в магазине. Например, приемку товара по штрихкодам или инвентаризацию прямо в торговом зале.

12950 руб.

30.05.2023    3388    2    0    

4

Внешняя компонента для сканирования (замена TWAIN-компоненты БСП) (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

2400 руб.

12.05.2020    26244    131    99    

83

Внешняя компонента для подключения 1С к телефонии Asterisk

Разработка внешних компонент Телефония, SIP Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    44977    117    64    

60
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 29.01.18 04:38
Сообщение было скрыто модератором.
...
2. pvlunegov 157 30.10.18 21:15 Сейчас в теме
Кто нибудь скачал распознавание речи? Попробовали внешнюю компоненту.
Просьба отписаться о ее возможностях, скорость распознавания, характеристики распознавания, точность, словарность и т.п....
3. IgorKissil 350 31.10.18 08:06 Сейчас в теме
(2)Все не лучше и не хуже встроенного распознавателя android плюс устройство. Компонента не реализует собственные алгоритмы, а только обращается к google speech API.
4. lunjio 66 01.01.19 07:01 Сейчас в теме
Даже в другом универсальном решении - Xamarin при обращении к однотипным устройствам аппарата, например, сенсорам, приходится программировать, учитывая особенности конкретной операционной системы. - Не надо дезинформировать людей, есть Nuget Packages которые позволяют просто скачать компоненту и не заморачиваться с реализацией на конкретной платформе, как пример пакет Xamarin.Essentials.
5. msergeev79 9 17.01.19 16:14 Сейчас в теме
Насколько понимаю, стандартный класс SpeechRecognizer позволяет получать промежуточные результаты распознавания через класс RecognitionListener. Подскажите, в компоненте это реализовано?
Хотелось бы сделать примерно так: пользователь нажал кнопку - начинается распознавание, и его речь сразу же появляется в поле. Нажал кнопку еще раз (чтобы не нужно было выдерживать паузу после речи) - распознавание завершилось.
6. kabanoff 49 22.01.19 12:00 Сейчас в теме
Добрый день! Скачал ваше приложение "Распознавание речи". Не могу установить на Android 4.4.2 - пишет "Приложение не установлено". Аппарат переведен в режим разработчика. Где можно увидеть причину, почему не устанавливается?
7. kabanoff 49 06.02.19 17:26 Сейчас в теме
(6)
Аппарат переведен в режим разработчика. Где можно увидеть причину, почему не устанавливается?

Игорь, можете ответить на сообщение?
8. user1325921 15.05.20 12:42 Сейчас в теме
Очень полезная статья, спасибо. Скачал сорсы, буду разбирать в ближайшие две недели.

В последние две недели тоже пришел к этому:
Как было сказано, иногда они искусственные. Например, 1С закрыла доступ из компоненты к визуальной части интерфейса приложения. Программист не может вывести свою собственную форму (Activity) на экран. Кто изучал пример внешней компоненты для андроид от 1С догадается, что для этого управляемый код компоненты выполняется в отдельном потоке (базовый java класс наследуется от Runnable


Один вопрос, Игорь, а получалось ли для Android используя Kotlin/java, или на голом С в самой прослойке между Android и 1C перехватывать и работать с видеопотоком, обрабатывая события из него в нативной компоненте на мобильнике, а далее отображать сам видеопоток в форме 1С-приложения? Работаю над рядом сценариев с augmented reality и ломаю над этим голову

Стал думать про запуск Activity с опр. layout, чтобы была видимость видеопотока на ней, а всё остальное на экране было бы от основой Activity, но под Android очень мало опыта, поэтому идёт всё крайне медленно.
Оставьте свое сообщение