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

02.06.18

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
Распознавание речи
.zip 74,57Mb
20
20
1 SM
Скачать Купить за 1 850 руб.
Барометр
.zip 1,30Mb
4
4
5 SM
Скачать Купить за 3 050 руб.

Истек год с момента выхода технологии внешних компонент для мобильных приложений (далее ТВК). Это довольно большой срок в 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.х Управленческий учет Платные (руб)

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

2880 руб.

03.12.2018    56875    178    103    

169

SALE! 25%

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

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

13200 9900 руб.

27.12.2021    35554    93    161    

189

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

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

2000 руб.

22.04.2019    94053    542    186    

309

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

Внешняя компонента в виде библиотеки (.dll файл), позволяющая посылать команды и получать ответы по протоколу WebSocket из 1С. Компонента работает только на стороне "клиента".

4440 руб.

22.06.2020    17328    16    33    

21

1С-программирование Мобильная разработка Программист Стажер Платные (руб)

Данный онлайн-курс предусматривает изучение базовых принципов создания приложений для операционной системы Android, работающих на мобильной платформе “1С:Предприятие”. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие” при разработке прикладных решений для “обычных” компьютеров, но пока ещё не занимался разработкой 1С-приложений, предназначенных для работы на мобильных устройствах.

12900 руб.

08.06.2023    7121    1    0    

47

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

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

3000 руб.

12.05.2020    27047    135    98    

87

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

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    35792    110    127    

113
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 29.01.18 04:38
Сообщение было скрыто модератором.
...
2. pvlunegov 158 30.10.18 21:15 Сейчас в теме
Кто нибудь скачал распознавание речи? Попробовали внешнюю компоненту.
Просьба отписаться о ее возможностях, скорость распознавания, характеристики распознавания, точность, словарность и т.п....
3. IgorKissil 351 31.10.18 08:06 Сейчас в теме
(2)Все не лучше и не хуже встроенного распознавателя android плюс устройство. Компонента не реализует собственные алгоритмы, а только обращается к google speech API.
4. lunjio 67 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 очень мало опыта, поэтому идёт всё крайне медленно.
Оставьте свое сообщение