Android Java и NativAPI C++ внешняя компонента для широковещательных сообщений (отправка и прием). Подключаем сканер ШК и клавиатуру к "1С мобильное приложение"

13.04.21

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

Подключаем сканер ШК и клавиатуру к "1С мобильное приложение", на терминале сбора данных "ATOL Smart.Lite android 7.0". Работаем с буфером обмена. В архиве к теме; 1. исходник компоненты (папка package готовый zip); 2. исходник "AccessibilityService" для перехвата клавиатуры (папка package готовый apk); 3. cf - тестовая конфигурация

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

Наименование Файл Версия Размер
компонента, сервис, цф и исходники
.zip 11,57Mb
118
.zip 11,57Mb 118 Скачать

 

На чем я работал:

1. Android Studio 3.6.2

2. Мобильное приложение 1С 8.3.16.142

3. 1С:Предприятие 8.3 (8.3.17.1386)

Начнем с описания функционала:

// Описание: Функция создает класс Broadcast
// Параметры:
//Обязательные.
//	Фильтр- строка. Фильтр входящих или исходящих сообщений.
//Не обязательные.
//  Представление - строка. если заполнено тогда в процедуре ВнешнееСобытие(Источник, Событие, Данные) встанет в событие = Представление  //                                                                        иначе  Событие = Фильтр;
//Возвращает указатель на класс тип строка
Указатель = Компонента.CreateBroadcast(Фильтр, Представление)

// Описание:  Процедура добавляет расширения для сообщения Broadcast
// Параметры:
//  обязательные.
//	Указатель- строка. Указатель на класс Broadcast созданный функцией CreateBroadcast;
//  Расширение- строка. Имя расширения сообщения; 
//  Значение - строка,число,булево,число с точкой . Для приема сообщений типизирует значение расширения и является значение по умолчанию если в раширении нет или не тот тип данных. Для отправки сообщений является значением расширения и типизирует его.
// Не обязательные.
//  Представление - строка. если заполнено тогда в процедуре ВнешнееСобытие(Источник, Событие, Данные) Данные это JSONСтрока где ключом является либо имя расширения либо его представлением.
Компонента.AddStringExtra(Указатель, Расширение, Значение, Представление)

// Описание: Процедура запускает процесс перехвата сообщений и отправки во "ВнешнееСобытие(Источник, Событие, Данные) "
// Параметры:
//  обязательные.
// Указатель- строка. Указатель на класс Broadcast созданный функцией CreateBroadcast;
Компонента.Listen(Указатель)

// Описание: Процедура отправляет Broadcast  сообщение
// Параметры:
// обязательные.
// Указатель- строка. Указатель на класс Broadcast созданный функцией CreateBroadcast;
Компонента.Send(Указатель)	

// Описание: Процедура удаляет класс Broadcast;
// Параметры:
// не обязательные.
// Указатель- строка. Указатель на класс Broadcast созданный функцией CreateBroadcast;
// если не заполнен удаляются все созданные классыBroadcast
Компонента.DeleteBroadcastEvent(Указатель);


// Описание: Процедура получает данные настройки класса Broadcast;
// Параметры:
// обязательные.
// Указатель- строка. Указатель на класс Broadcast созданный функцией CreateBroadcast;
// JSONСтрока - строка. данные в JSON.
JSONСтрока = Компонента.GetBroadcastInfo(Указатель)

// Описание: Процедура создает ВнешнееСобытие
// Параметры:
// обязательные.
// Текст - строка. 
// результат выполнения ВнешнееСобытие("MALutilities", "EchoExternalEvent", Текст)
Компонента.EchoExternalEvent(Текст); 

// Описание:Положить текст в буфер 
Компонента.CopyToClipboard(Текст);

// Описание:Получить текст из буфера 
Текст = Компонента.PasteFromClipboard();

// Описание:тост - всплывающее сообщение с текстом.
Компонента.Toast(Текст)

// Описание: Количество созданных классов Broadcast 
Число = Компонента.CountBroadcastEvent;

// Описание: Данные об устройстве
//DeviceInfo	"{"RELEASE":"7.0","SDK":24,"BOARD":"ATOL_Smart.Lite","BOOTLOADER":"unknown","BRAND":"ATOL","DEVICE":"ATOL_Smart.Lite","DISPLAY":"B0881_C1_ATOL_V1.1.2_20190927","FINGERPRINT":"ATOL\/full_rlk6580_we_c_n\/ATOL_Smart.Lite:7.0\/NRD90M\/1569593541:user\/release-keys","HARDWARE":"mt6580","HOST":"BuildServer","ID":"NRD90M","MANUFACTURER":"ATOL","MODEL":"ATOL Smart.Lite","PRODUCT":"ATOL_Smart.Lite","RADIO_VERSION":"","TAGS":"release-keys","TIME":1569593514000,"TYPE":"user","USER":"Android13","AddIn1cInfo":{"JTHIS_PTR":"ru.mal.malutilities.DeviceClass@52963cd","JACT_PTR":"com.e1c.mobile.App@3f1b108","CPP_PTR":2382015200,"REVISIOV":109,"LOCAL_PACKEGE_NAME":"com.e1c.mobile"}}"
JSONСтрока = Компонента.DeviceInfo;

// Описание:отладка можно посмотреть версию
JSONСтрока = Компонента.InfoString;

Приступим к тестированию.

На чем я тестировал: ТСД "ATOL Smart.Lite android 7.0". Мобильное приложение 1с 8.3.15.62. IIS

1. Подключение стандартное ниже на скрине (не делал проверку при подключении.).

Важно:

Во время настройки Web-публикации следует провести следующее действие. В настройках http-сервера необходимо добавить типы MIME для следующих расширений:

  • .so
  • .apk

Тип MIME: application/octet-stream

 

2. Сделал кнопку для вкл/выкл описали события. (не судите за логику, она не важна главное это тестирования как можно большего функционала);

Код:


&НаКлиенте
Процедура Включить(Команда)
	
	Если Не глНативКомпонента.CountBroadcastEvent Тогда
		//Тост, всплывающее сообщение. 1 параметр текст сообщение. второй параметр: долгое - истина или короткое - ложь
		глНативКомпонента.Toast("Начинаем!", Ложь);
		глНативКомпонента.CopyToClipboard("Время открытия: " + ТекущаяДата());

		//Вызывает ВнешнееСобытие("MALutilities","EchoExternalEvent","Проверка");
		глНативКомпонента.EchoExternalEvent("Проверка"); 
		
		
	Иначе 
		// CountBroadcastEvent - количество Broadcast
		Доочистки = глНативКомпонента.CountBroadcastEvent;
		// Очищает все Broadcast, если передать параметр то удалит только этот. пр. DeleteBroadcastEvent(ЭвентУказатель);
		глНативКомпонента.DeleteBroadcastEvent(); 
		ТекстТоста = "Очистка: " + Доочистки + " : " + глНативКомпонента.CountBroadcastEvent
					+ " >> " + глНативКомпонента.PasteFromClipboard();
		глНативКомпонента.Toast(ТекстТоста, Ложь);

	КонецЕсли;	
	
КонецПроцедуры

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
	
	Если Источник = "MALutilities" Тогда
		// получили эхо от функции   EchoExternalEvent("Проверка"); 
		Если (Данные = "Проверка" И Событие = "EchoExternalEvent") Тогда 
			
			// Создаем BROADCAST для считывателя штрих кода
			ЭвентУказатель = глНативКомпонента.CreateBroadcast("com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST", "ЭтоШтрихкод");
			глНативКомпонента.AddStringExtra(ЭвентУказатель,"EXTRA_BARCODE_DECODING_DATA","","Штрихкод");
			глНативКомпонента.AddStringExtra(ЭвентУказатель,"EXTRA_BARCODE_DECODING_SYMBOLE","");
			глНативКомпонента.Listen(ЭвентУказатель);
			// посмотрим данные BROADCAST для считывателя штрих кода
			ДанныеКласса = ОбщийМодульКлиент.СоздатьСтруктуруИзAndroid(глНативКомпонента.GetBroadcastInfo(ЭвентУказатель));
			
			// Создаем BROADCAST для считывателя клавиш событие выдает AccessibilityService
			ЭвентУказатель = глНативКомпонента.CreateBroadcast("ru.mal.malutilities.onKeyEvent.1");
			глНативКомпонента.AddStringExtra(ЭвентУказатель,"Code",-256,"Код");
			глНативКомпонента.AddStringExtra(ЭвентУказатель,"Action",-256);
			глНативКомпонента.AddStringExtra(ЭвентУказатель,"Flags",-256);
			глНативКомпонента.Listen(ЭвентУказатель);
			
			// Создаем BROADCAST для AccessibilityService проверка на работу
			ЭвентУказатель = глНативКомпонента.CreateBroadcast("ru.mal.malutilities.CONFIG_SERVICE.1.ECHO", "ТестСервер");
			глНативКомпонента.AddStringExtra(ЭвентУказатель,"TEXT","");
			глНативКомпонента.AddStringExtra(ЭвентУказатель,"NAME","");
			глНативКомпонента.Listen(ЭвентУказатель);
			
			//выдаем BROADCAST для AccessibilityService проверка на работу
			ЭвентУказатель = глНативКомпонента.CreateBroadcast("ru.mal.accessibilityservice.CONFIG_SERVICE.1");
			глНативКомпонента.AddStringExtra(ЭвентУказатель,"ECHO","Сервер работает");
			глНативКомпонента.Send(ЭвентУказатель);
			//Удаляем выданый BROADCAST для AccessibilityService
			глНативКомпонента.DeleteBroadcastEvent(ЭвентУказатель); 
		КонецЕсли;		
		
		//Получили ответ от AccessibilityService значит работает
		Если (Событие = "ТестСервер") И ОбщийМодульКлиент.СоздатьСтруктуруИзAndroid(Данные).TEXT = "Сервер работает" Тогда 

			// Создаем BROADCAST для AccessibilityService настраеваем его
			СтруктураДанных = ОбщийМодульКлиент.СоздатьСтруктуруИзAndroid(Данные);
			ЭвентУказатель = глНативКомпонента.CreateBroadcast("ru.mal.accessibilityservice.CONFIG_SERVICE.1", "ТестСервер");
			//
			глНативКомпонента.AddStringExtra(ЭвентУказатель, "ACTION_TYPE", 0); 
			//выдаем 2 BROADCAST для AccessibilityService на настройку и удаляем его можно в одном пакете
			глНативКомпонента.Send(ЭвентУказатель);
			глНативКомпонента.AddStringExtra(ЭвентУказатель, "FLAGS", Истина); 
			глНативКомпонента.Send(ЭвентУказатель);   
			глНативКомпонента.DeleteBroadcastEvent(ЭвентУказатель); 
			
		КонецЕсли;	
		//Получили события от клавиатуры или клавиш
		Если (Событие <> "ТестСервер") И (Событие <> "EchoExternalEvent") Тогда 
			
			СтруктураДанных = ОбщийМодульКлиент.СоздатьСтруктуруИзAndroid(Данные);
			ВнСообщения = Данные + Символы.ПС + Событие;
			
		КонецЕсли;	
		
	КонецЕсли;	
	
КонецПроцедуры

3. Посмотрим точки останова.

После выполнения глНативКомпонента.EchoExternalEvent("Проверка") возникает внешнее событие. В котором мы настроим все нужные нам классы и спросим у сервиса работает он или нет.

Сервис отвечает что он работает:

После обработки ответа от сервиса, настроим его:

// какое событие ловим Если  -1 тогда будут приходить данные в Action
//case "ACTION_DOWN":TypeAction = 0; break; Нажали
//case "ACTION_UP":TypeAction = 1; break; Отпустили
//case "ACTION_UP_DOWN":TypeAction = -1; break; Или нажали Или опустили
//1 - По умолчанию настроен сервис
глНативКомпонента.AddStringExtra(ЭвентУказатель, "ACTION_TYPE", 0);  

// нужны ли дополнительные флаги к кнопкам Если не Истина тогда будут приходить данные в Flags
//ложь - По умолчанию настроен сервис
глНативКомпонента.AddStringExtra(ЭвентУказатель, "FLAGS", Истина); 

глНативКомпонента.Send(ЭвентУказатель); 

Теперь посмотрим события от кнопок(создает сервис) и сканера ШК:

Как видно обмен идет в двух направлениях. Теперь остановим все.

 

По коду java и С++  не чего писать не буду(и так столько написано) его много и статья ориентирована на тех кто будет использовать готовый результат. Если что, по коду java и С++, отвечу на вопросы в комментариях. Смотрите в исходниках они есть в архиве.

В Архиве исходники на сервис,  компоненту и сf. В папках package уже готовые файлы. Сервис нужно устанавливать, как apk, а запускать в Настройки-Спец. возможности.

Все исходники написаны под Android Studio 3.6.2. Все, что нужно, само подгрузится. 

P.S. Доработал версию добавил переменную: 

// Описание: (чтение и запись) Если Истина тогда возникает события при изменении данных в буфере обмена.
Булево = Компонента.ClipboardEvent;
Компонента.ClipboardEvent = Булево;

См. также

SALE! 20%

Автоматический заказ поставщику в 1С: загрузка прайсов и анализ цен поставщиков для УТ 10.3, УТ 11, КА2, УНФ, УПП, ERP, Розница 2

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

Система управления запасами для 1С помогает работать с запасами правильно: автоматически рассчитывает потребность и делает заказ поставщику, загружает прайсы, перемещает товары по филиалам, анализирует продажи и позволяет управлять ассортиментом.

28500 22800 руб.

21.04.2017    90159    105    39    

190

ККТ-ОНЛАЙН 54-ФЗ: Обработка для работы онлайн касс АТОЛ, ШТРИХ, VIKI PRINT и т.д. МАРКИРОВКА + ЭКВАЙРИНГ + БЕСПЛАТНЫЙ ДЕМО

ККМ Кассовые операции Розничная торговля Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия 1.6 1С:Бухгалтерия автономного учреждения 1С:CRM ПРОФ, КОРП Россия Платные (руб)

Универсальная обработка для обслуживания любых фискальных регистраторов (ККТ), в том числе Веб сервер АТОЛ. Работает в соответствии с 54-ФЗ. (ФФД 1.0, ФФД 1.05, ФФД 1.1). Подключайте любую онлайн кассу к практически любой конфигурации. Нет необходимости обновлять 1С. Можно бесплатно скачать и протестировать. Может работать одновременно с несколькими онлайн-кассами, либо одной с разных рабочих мест. (через RDP, TCP\IP или веб-сервер) Позволяет разделить один чек сразу на несколько ККТ или на несколько систем налогообложения. Можно настроить собственный шаблонов чека. Можно использовать эквайринг там, где он не поддерживается. Работает на LINUX и Windows ЭМУЛЯТОР + ЭКВАЙРИНГ + МАРКИРОВКА + ПОДДЕРЖКА ФФД 1.2

4800 руб.

27.02.2017    762938    4668    9495    

2781

ЕГАИС++. Опт, производство, импорт

Оптовая торговля Розничная торговля Обмен с ГосИС Платформа 1С v8.3 1С:Управление торговлей 10 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Бухгалтерский учет Управленческий учет Акцизы Платные (руб)

Полнофункциональное расширение (ранее известное как Модуль 1С-ЕГАИС) для взаимодействия типовых конфигураций 1С и ЕГАИС, предоставляющее максимум возможностей по работе с УТМ. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.

8970 руб.

15.12.2015    165945    678    362    

385

SALE! 10%

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

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

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 9504 руб.

29.10.2014    210135    620    524    

439

Обмен с системой ЦРПТ (Универсальная конфигурация ХамелеонЦРПТ + маркировка табака, обуви, одежды, лекарств, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин)

Оптовая торговля Розничная торговля Обмен с ГосИС Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия Бухгалтерский учет Управленческий учет Платные (руб)

Данная публикация создана для помощи разработчикам, интеграторам и другим заинтересованным лицам по настройке системы маркировки обуви, одежды, лекарств, табака, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин. Смело задавайте нам вопросы по работе с ЦРПТ, GS1, ЭДО, Национальным каталогом, мы накопили достаточно большую базу знаний по данным темам и готовы ответить на все Ваши вопросы.

104000 руб.

18.03.2019    110315    34    114    

178

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

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

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

2880 руб.

03.12.2018    54598    137    102    

161

Печать кассовых чеков на одну ККМ с нескольких рабочих мест для 1С:УТ11.х, КА2.х, Розница 2.х, УНФ, ERP 2.х, БП 3, БГУ2

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

Расширение конфигурации для УТ 11.4, 11.5, КА 2.4, 2.5, Розница 3.0, 2.3 и 2.2, УНФ 1.6, УНФ 3x, ERP 2.4, 2.5, БП 3, БГУ2 (Управляемые формы) позволяет выполнять печать кассовых чеков на одну ККМ 54-ФЗ с нескольких рабочих мест. НИКАКИХ НАСТРОЕК В РАЗРАБОТКЕ - ПОДКЛЮЧИЛ И ПЕЧАТАЙ. Если у вас несколько отделов и одна ККМ - печатайте на одной ККМ! Если у вас две ККМ и одна поломалась - печатайте на одной ККМ, пока ремонтируете другую!

4000 руб.

27.08.2018    115970    978    564    

827
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. CyberCerber 852 29.04.20 15:57 Сейчас в теме
Правильно ли я понял, что эта компонента работает универсально для всех броадкастов? Можно взять любой ТСД, отловить событие, узнать его структуру, а дальше уже обрабатывать?
Компонента написана на C++ и Java одновременно? Почему так?
3. SanyMaga 68 30.04.20 15:11 Сейчас в теме
(1) Работает для всех броадкастов(для подключения нужно знать фильтр и структуру(если только события то структура не нужна )). На ТСД должен быть андроид >= 4 версии. На с++ написано все что связано с натив API 1c а на java все что связано с ОС андройд.
4. CyberCerber 852 30.04.20 15:18 Сейчас в теме
(3) Понял, круто, спасибо за инфу
2. пользователь 30.04.20 15:10
Сообщение было скрыто модератором.
...
5. sigma17 12 21.05.20 11:10 Сейчас в теме
Как можно узнать фильтр для другого ТСД?
7. SanyMaga 68 22.05.20 05:59 Сейчас в теме
(5)
Даже и не знаю. Наверное в описание к ТСД.

На ТСД "ATOL Smart.Lite android 7.0" в приложении "Barcode Utility" , "Scan Setting" -> "Broadcast setting"
6. SanyMaga 68 22.05.20 05:59 Сейчас в теме
Даже и не знаю. Наверное в описание к ТСД.

На ТСД "ATOL Smart.Lite android 7.0" в приложении "Barcode Utility" , "Scan Setting" -> "Broadcast setting"
8. sigma17 12 22.05.20 10:43 Сейчас в теме
9. Const885 13.06.20 07:57 Сейчас в теме
Пробую разобраться в данной теме , можно ли получить исходники с++
10. SanyMaga 68 15.06.20 05:34 Сейчас в теме
(9) Во вложении архив в нем все исходники. Или смотри здесь https://github.com/ripreal/NativeSleep_1C
11. booblich 30.06.20 11:59 Сейчас в теме
Подскажите, будет ли это работать на "ATOL Smart.pro, android 9.0"?
12. SanyMaga 68 30.06.20 12:14 Сейчас в теме
(11) Почему бы и нет. Должно работать. Не вижу нечего ограничивающего в разрезе Android java sdk
13. booblich 30.06.20 14:43 Сейчас в теме
(12) А если глНативКомпонента.EchoExternalEvent("Проверка"); отрабатывает, внешнее событие отрабатывает, перехват сообщений от сканера ТСД запускается, а внешнего события при сканировании не происходит. В таком случае может быть проблема в чем-то кроме добавленных расширений (AddStringExtra)? На ATOL Smart.Lite все отрабатывает как надо.
14. SanyMaga 68 02.07.20 04:54 Сейчас в теме
(13)
А в настройках сканера включен броадкаст? Если да то попробуйте функцией "Send" отправить самому себе тот броадкаст который в настройках сканера.
При этом Send выдаст сообщение в очередь Android, а затем его перехватит 1с.
// Описание: Процедура отправляет Broadcast  сообщение
// Параметры:
// обязательные.
// Указатель- строка. Указатель на класс Broadcast созданный функцией CreateBroadcast;
Компонента.Send(Указатель)	


примерно так:
ЭвентУказатель = глНативКомпонента.CreateBroadcast("Какойта фильтр", "Тест");
глНативКомпонента.Listen(ЭвентУказатель);
глНативКомпонента.Send(ЭвентУказатель);
15. booblich 06.07.20 14:33 Сейчас в теме
(14)
Так и происходит. То есть 1С перехватило сообщение, которое вызвал Send. Однако от сканера - тишина. Может что-то еще нужно проверить?
18. SanyMaga 68 07.07.20 05:36 Сейчас в теме
(15)
Читая инструкцию по настройки ATOL Smart.pro я НЕ нашёл настройку броадкастов. только клавиатура и буфер обмена.


https://yadi.sk/i/py0RCaw_E8b3QA

Киньте скрин с вашими настройками.

Вот так настраевается в "ATOL Smart.Lite:


https://yadi.sk/i/FSeETyAz9_nGWg

Не важно как вы настроите расширения функцией AddStringExtra(можно вобще не настраивать). Главное это ФИЛЬТР на скрине "Action name".
19. booblich 07.07.20 13:48 Сейчас в теме
(18)
На ТСД есть еще Broadcast intnet (https://yadi.sk/i/D7tF_rmuJgiPUQ). Там в данный момент стоят такие настройки: https://yadi.sk/i/cQP82uYaiBjUIw.
Сейчас настроено так:

ЭвентУказатель = глНативКомпонента.CreateBroadcast("com.hht.scanwedge", "ЭтоШтрихкод");
глНативКомпонента.AddStringExtra(ЭвентУказатель,"com.hht.datawedge.data_string","","Штрихкод");
глНативКомпонента.AddStringExtra(ЭвентУказатель,"com.hht.datawedge.label_type","");

Возможно, просто что-то не так заполнено?
20. SanyMaga 68 08.07.20 13:06 Сейчас в теме
(19)

Компонента вроде правильно настроена.

Попробуйте:
1. Установить "SEND BARCOD DATA" с "Clipbord" в "off"
2. Очистить в намерениях категорию "Intent->Category"

К сожалению нет этого аппарата под рукой .

Попробуйте что то типо токого (первое что нашол не знаю работает или нет): https://play.google.com/store/apps/details?id=com.balda.intenttask&hl=ru - посмотри идут события от него или нет.
16. macrogroup 06.07.20 23:01 Сейчас в теме
Привет железка такая же как у автора.
падает на второй строке глНативКомпонента = Новый("AddIn.rumalutilities.MALutilities");
Похоже не удается подключить компоненту.
Есть идеи как пофиксить?
17. macrogroup 06.07.20 23:07 Сейчас в теме
Тфу блин слетели настройки
Во время настройки Web-публикации следует провести следующее действие. В настройках http-сервера необходимо добавить типы MIME для следующих расширений:

.so
.apk
Тип MIME: application/octet-stream
Теперь все работает спасибо
50. Широкий 692 31.08.20 15:07 Сейчас в теме
(17)
application/octet-stream
можно ли подробнее где это прописывается для апача?
51. SanyMaga 68 31.08.20 16:01 Сейчас в теме
(50)
https://www.google.com/search?client=opera&q=Установка+mime+для+апач&sourceid=opera&ie=UTF­-8&oe=UTF-8

я сам не знаю не навастривал под апач. в соседней ветке настраивали
.
52. Tiger77 69 14.09.20 04:31 Сейчас в теме
Android 5.1, Мобильная Платформа 8_3_17_67 ARM x64, Платформа 1С - 8.3.16.1659, IIS.

На мобильном приложении не загружается компонента. ПодключитьВнешнююКомпоненту всегда возвращает ложь без ошибок

Типы .so и .apk как в (17) прописал - не помогает. Что еще можно попробовать ?
53. SanyMaga 68 14.09.20 09:37 Сейчас в теме
(52)
В мобильной платформе "1С:Предприятие" загрузка архивов внешних компонент в конфигурацию осуществляется в макеты с типом "Внешняя компонента".


https://its.1c.ru/db/metod8dev#content:3221:hdoc:_подготовка_внешних_компонент_для_за

Попробуйте настроить Мимы( .so и .apk) в корне IIS если они у вас на сайт прописаны.
54. Tiger77 69 14.09.20 22:17 Сейчас в теме
(53) с IIS все ок.

Например, компонента http://infostart.ru/public/1230245/ работает отлично

Пробовал понизить версию на 8.3.11, пробовал платформу х32 результат тот же - компонента не грузиться. В логах IIS ошибок нет, загрузка apk и so идет с кодом 200
21. unreal123 31.07.20 13:12 Сейчас в теме
При старте приложения на мобильном устройстве ругается на следующей строке кода
ПодключитьВнешнююКомпоненту("ОбщийМакет.Макет", "rumalutilities", ТипВнешнейКомпоненты.Native);
глНативКомпонента = Новый("AddIn.rumalutilities.MALutilities");

Тип не определен AddIn.rumalutilities.MALutilities
22. SanyMaga 68 08.08.20 17:43 Сейчас в теме
(21)
Смотри выше.

Во время настройки Web-публикации следует провести следующее действие. В настройках http-сервера необходимо добавить типы MIME для следующих расширений:

.so
.apk
Тип MIME: application/octet-stream
23. boss_kuz 106 11.08.20 06:20 Сейчас в теме
Добрый день уважаемы Александр . Подскажите если создать класс :
ЭвентУказатель = глBroadcast.CreateBroadcast("ru.mal.malutilities.onKeyEvent.1");
		глBroadcast.AddStringExtra(ЭвентУказатель,"Code",-256,"Код");
		глBroadcast.AddStringExtra(ЭвентУказатель,"Action",-256);
		глBroadcast.AddStringExtra(ЭвентУказатель,"Flags",-256);
		глBroadcast.Listen(ЭвентУказатель);


то после сканирования штрихкода вызываются два события одно штрихкод ( к примеру 12229309), а потом ru.mal.malutilities.onKeyEvent.1 с данными {"Action":-256,"Flags":8,"Код":119}. Как понять что onKeyEvent не нужно обрабатывать ?
И если такого сделать невозможно, то как заставить что бы всегда (неважно нажата кнопка или отсканирован штрихкод) порядок следования событий был одинаков ?
24. boss_kuz 106 11.08.20 06:57 Сейчас в теме
(23) Вот я идиот, только сейчас догнал что событие ru.mal.malutilities.onKeyEvent.1 возникает при сканировании потому что я НАЖИМАЮ КНОПКУ СКАНЕРА-А-А. И все же если нажать к примеру клавишу Enter событие "Штрихкод" возникает , есть вариант его побороть ?
25. SanyMaga 68 11.08.20 09:02 Сейчас в теме
(24)
Только программно. У меня на ТСД кнопка сканирования отдельная (нет не каких задач кроме сканирования). и ее код я не обрабатываю. Есть вариант поправить сервис, исходники его в архиве. Или переназначить кнопку сканирования в настройках сканера.

Можно при каждом сканировании ШК менять представление например текущая дата или инкремент переменной, и разделять по времени события или по индексу события.

Компонента.AddStringExtra(Указатель, Расширение, Значение, Строка(Индекс )) 
Индекс = Индекс + 1
26. user592473_damien256 14.08.20 23:51 Сейчас в теме
Здравствуйте, Александр! Помогите разобраться. У меня ТСД Lecom, и проблема в том, что он возвращает данные штрихкода в виде массива.
Нашел я к нему исходники тестового приложения, собрал, проверил - работает. Оттуда и взял данные для intent-фильтра.

Естественно, в поле штрихкода возвращается пустая строка, т. к. компонента не обрабатывает массив. Другие параметры (тип ШК, длина - возвращаются корректно). Добавил в BroadcastEvent.java в методе "onReceive" условие и вписал туда код из тестового приложения ("barocode" - не опечатка):
                        for (Map.Entry<String, String> entry : StringExtraList.entrySet())
                        {
                            // ----------------------------------------
                            String Value = "";

                            if (entry.getKey() == "barocode")
                            {
                                byte[] barocode = intent.getByteArrayExtra("barocode");
                                int barocodelen = intent.getIntExtra("length", 0);
                                Value = new String(barocode, 0, barocodelen);
                            }
                            else
                            {
                                Value = intent.getStringExtra(entry.getKey());
                            }
                            // -------------------------------------------

                            //String Value = intent.getStringExtra(entry.getKey());
                            AnsverJson.put(GetNameExt(entry.getKey()),(Value ==  null) ? entry.getValue() : Value);
                        }

Показать

Собрал apk, архив с компонентой, обновил макет в конфигурации. Результат - та же пустая строка в "barocode"... Думаю, может ошибка где - написал просто для проверки:
if (entry.getKey() == "test")
{
     Value = "test msg";
}

В 1С добавил экстра:
глНативКомпонента.AddStringExtra(ЭвентУказатель,"test", "", "Это тест");

все пересобрал, обновил - результат: {"Это тест":"","Тип штрихкода":0,"Длина":13}, не возвращается "test msg"...
Такое впечатление, что компонента где-то закешировалась и при обновлении конфигурации просто работает Ваш вариант, а не то что собрал я. Я что-то упустил или чего-то не знаю? Подскажите, пожалуйста!
35. alexinnnn 21.08.20 17:14 Сейчас в теме
(26) Аналогичная проблема, скорее всего на многих ТСД
barocode похоже байтовый массив, вот пример onReceive из другой компоненты:

public void onReceive(Context context, Intent intent) {
        byte[] barcode = intent.getByteArrayExtra("barocode");
        int lng = intent.getIntExtra("length", 0);
        this.barcodeStr = new String(barcode, 0, lng);
        if (lng > 0) {
            Intent intentFor1C = new Intent("com.google.android.c2dm.intent.RECEIVE");
            intentFor1C.putExtra("text", BCService.EventID);
            intentFor1C.putExtra("title", "1C");
            intentFor1C.putExtra("data", this.barcodeStr);
            if (BCService.BaseName != null || BCService.BaseName != "")  {
                intentFor1C.putExtra("base", BCService.BaseName);
            }
            context.sendBroadcast(intentFor1C);
        }
    }
Показать


компоненты пока не собирал, помогите чтобы работало!
36. alexinnnn 21.08.20 23:53 Сейчас в теме
(26) Иду по вашим стопам, аналогично в android studio переделал компоненту, но в мобильном приложении работает старый код(( Или выдает ошибку "Файл не обнаружен '/data/user/0/com.e1c.mobile.client/files/1C/1cem/........./libru_mal_utilities.so.cfl'. 2(0x00000002)" То так то так, непонятно...
38. alexinnnn 22.08.20 00:17 Сейчас в теме
(26) Ура, победил))
1. Во первых условие if (entry.getKey() == "barocode") когда должно - не выполняется, Когда entry.getKey() это barocode, оно почему-то не равно "barocode"
2. Если убрать условие if (entry.getKey() == "barocode") остальной код полностью рабочий.
3. Чтобы победить кеширование, нужно делать все в правильной последовательности: 1. Удалить базу в мобильном приложении. 2. Обновить компоненту в макете. 3. Переопубликовать/обновить на http сервере. 4. Пересоздать в мобильном, запустить, вуаля работает.
39. user592473_damien256 22.08.20 12:53 Сейчас в теме
(38)
Мистика какая-то... А как тогда переписать условие if (entry.getKey() == "barocode")? Может как-то проверять что возвращается в intent.getByteArrayExtra("barocode")?
47. alexinnnn 24.08.20 17:03 Сейчас в теме
(39)
Нужно просто посмотреть в отладчике значение, возможно оно имеет тип не строка, а когда используешь его как строка, оно автоматом в нее превращается, как обычно это бывает в 1с. Я отладчиком не научился еще работать, не было времени
48. user592473_damien256 25.08.20 09:04 Сейчас в теме
(47)
Я тоже не умею, времени не хватает сейчас андроид осваивать... Придется, видимо)
27. SanyMaga 68 15.08.20 10:04 Сейчас в теме
Да кешируется. Нужно пересоздать(удалить из списка и снова добавить) в "1С мобильное приложение" базу или почистить кеш.
28. user592473_damien256 15.08.20 10:55 Сейчас в теме
(27) Дело в том, что я ТСД сбросил до заводских и все установил заново - результат тот же... Ничего не понимаю... Может с сервисом что-то нужно делать еще? Может в Android-Studio что-то нужно еще (я просто сохранаю проект, потом Buld -> Build APK(s))?
29. SanyMaga 68 15.08.20 19:38 Сейчас в теме
(28)
Сервис только на кнопки.

Может if (entry.getKey() == "barocode") Зависит от регистра букв.
Выложи свой текст BroadcastEvent.java

Или остается только отладка в Android studio.
30. user592473_damien256 15.08.20 21:15 Сейчас в теме
(29)
Проблема какая-то со сборкой, наверное. Уже вообще все закомментировал в обработчике onReceive, собрал apk - события ловятся...
Прикрепил еще архив с проектом TestScan, который для ТСД. Собрал его, только дописал чтобы вместо штрихкода он выводил в текстовое поле список всех Extras (intent.getExtras().toString()). Выдал при считывании EAN-13 такое:
Bundle[{barocode=[B*d074b1c,length=13,aimid=[B*8a5b325,barcodeType=100}]

То есть китайские гении действительно назвали поле "barocode" :)
Прикрепленные файлы:
TestScan.zip
BroadcastEvent.java
31. SanyMaga 68 17.08.20 20:49 Сейчас в теме
(30)
[B*8a5b325 - тип + адрес - тип Byte Адресс 0x000008a5b325

Возможно проблема с кодировкой

Используй конструктор:
String(byte[] bytes, int offset, int length, String charsetName)
Constructs a new String by decoding the specified subarray of bytes using the specified charset.

barcodeStr = new String(barocode, 0, barocodelen,"UTF_16"); // как то так нет под рукой студии.

charsetName - Тип скорей всего это UTF_16 или какойнибуть ISO_8859_1

Проверь реальную длину:
barocode.length()
Символов может быть 13 а байт 13*2 = 26 тогда barocodelen*2
32. SanyMaga 68 21.08.20 09:37 Сейчас в теме
(31)
Нужно проверить для UTF еcли там BOM
33. user592473_damien256 21.08.20 10:14 Сейчас в теме
(32)
Так в их тестовом приложении работает...
Попробую создать с нуля конфигурацию, собрать компоненту, и подключить к ней. Ну не может быть, что собираю один код, а работает другой...
34. SanyMaga 68 21.08.20 10:32 Сейчас в теме
(33)
В их тестовом приложении может быть настроена кодировка по умолчанию UTF -16 (настройка проекта)

Вы в отладке посмотрите в андроид студия запустите мой app.

В модуле AddInNative.cpp найдите код:

//---------------------------------------------------------------------------//
//Отладка java
//---------------------------------------------------------------------------//


jlong CreateEventByJava(JNIEnv* env,jobject jClass, TAddInNative* pObject, int KeyTest)
{
Вызывается при нажатии на кнопку в MainAPP
Там много кода закоментировано . Это я отлаживал непосредственно в App Андроид

И события можно поймать в модуле BroadcastEvent.java и посмотреть что за байты приходят имено в мое АПП
37. alexinnnn 21.08.20 23:54 Сейчас в теме
(27) После удаления/пересоздания возникает вышеприведенная ошибка...
40. AneJIbcuH 37 23.08.20 09:18 Сейчас в теме
Добрый день! ТСД такой же (Смарт лайт), поставил на него сервис "accessibilityservice.apk",
Выполняю:
// Создаем BROADCAST для считывателя клавиш событие выдает AccessibilityService
ЭвентУказатель = глНативКомпонента.CreateBroadcast("ru.mal.malutilities.onKeyEvent.1");
глНативКомпонента.AddStringExtra(ЭвентУказатель,"Code",-256,"Код");
глНативКомпонента.AddStringExtra(ЭвентУказатель,"Action",-256);
глНативКомпонента.AddStringExtra(ЭвентУказатель,"Flags",-256);
глНативКомпонента.Listen(ЭвентУказатель);

но не возникает Внешнее событие при нажатии аппаратных кнопок. При считывании ШК возникает, всё норм.
Что делаю не так?
41. SanyMaga 68 23.08.20 09:48 Сейчас в теме
(40) А вы его запустили (запускать в Настройки-Спец. возможности.)? При запуске сервиса нужно дать разрешения.
42. AneJIbcuH 37 23.08.20 10:01 Сейчас в теме
43. AneJIbcuH 37 23.08.20 11:04 Сейчас в теме
(41) не могли бы ещё пояснить момент. Нажимаешь кнопки на ТСД, получаешь код, например 3 - код 10, 5 - код 12 и тд.
Что из себя данный код представляет? А главный вопрос, если разные ТСД (в том числе и модели), коды будут отличаться?
44. SanyMaga 68 23.08.20 11:12 Сейчас в теме
(43)Просто так закодированы кнопки производителем. Я думаю на разных ТСД будут разные коды клавиш.
45. AneJIbcuH 37 23.08.20 11:52 Сейчас в теме
Компонента здоровская!
А в DeviceInfo нельзя добавить текущий IP адрес wi-fi ? :)
46. SanyMaga 68 23.08.20 20:38 Сейчас в теме
49. AneJIbcuH 37 25.08.20 17:30 Сейчас в теме
(46) Благодарю, всё удалось. И под андроид 4.4 завести получилось.
55. user592473_damien256 29.09.20 14:55 Сейчас в теме
(34)
Победил, переписал onReceive, чтобы возвращал просто строку со штрихкодом. Теперь другая проблема)
В мобильной платформе для разработчиков компонента работает, а в собранном apk - нет, ошибка "Тип не определен AddIn.rumalutilities.MALutilities". Собирал на 8.3.15.62
Куда копать, подскажите, пожалуйста!
56. SanyMaga 68 29.09.20 16:49 Сейчас в теме
57. user592473_damien256 29.09.20 20:33 Сейчас в теме
(56)
Нет, вы не поняли. Все работает (у меня apache) нормально - когда загружена опубликованная конфигурация в мобильную платформу для разработчиков.
Не подключается та же компонента в уже собранном apk, соответственно имеем ошибку "Тип не определен AddIn.rumalutilities.MALutilities" при вызове конструктора
58. SanyMaga 68 30.09.20 10:44 Сейчас в теме
(57)
Я не делал не когда готовый АПК, мне нужна была всегда конфигурация чтоб обновлять ее в процессе работы. Там скорей всего нужно положить в двоичные данные и подключить по другому.
59. user1478935 04.11.20 20:44 Сейчас в теме
А если глНативКомпонента.EchoExternalEvent("Проверка"); отрабатывает, внешнее событие отрабатывает, но ответ от AccessibilityService не приходит - в чем может быть причина?
61. SanyMaga 68 05.11.20 09:24 Сейчас в теме
(59)
Вы его запустили? Сервис->ДопВозможности
60. SanyMaga 68 05.11.20 09:24 Сейчас в теме
Вы его запустили? Сервис->ДопВозможности
62. user1478935 05.11.20 09:59 Сейчас в теме
63. SanyMaga 68 05.11.20 10:23 Сейчас в теме
(62) И разрешения дали?

		
	// Создаем BROADCAST для AccessibilityService проверка на работу
			ЭвентУказатель = глНативКомпонента.CreateBroadcast("ru.mal.malutilities.CONFIG_SERVICE.1.ECHO", "ТестСервер");
			глНативКомпонента.AddStringExtra(ЭвентУказатель,"TEXT","");
			глНативКомпонента.AddStringExtra(ЭвентУказатель,"NAME","");
			глНативКомпонента.Listen(ЭвентУказатель);
			
			//выдаем BROADCAST для AccessibilityService проверка на работу
			ЭвентУказатель = глНативКомпонента.CreateBroadcast("ru.mal.accessibilityservice.CONFIG_SERVICE.1");
			глНативКомпонента.AddStringExtra(ЭвентУказатель,"ECHO","Сервер работает");
			глНативКомпонента.Send(ЭвентУказатель);
			//Удаляем выданый BROADCAST для AccessibilityService
			глНативКомпонента.DeleteBroadcastEvent(ЭвентУказатель); 
Показать


Кнопки отрабатывает только физические.
64. user1478935 05.11.20 11:24 Сейчас в теме
(63) Что значит дали разрешения? При просмотре "О приложении" - "Приложение не запрашивало разрешений"
65. SanyMaga 68 05.11.20 11:35 Сейчас в теме
(64)
Сервис нужно устанавливать, как apk, а запускать в Настройки-Спец. возможности. При запуске он спрашивает разрешения на перехват клавиатуры.

скаченыйархив\malaccservice\package\ru_mal_accessibilityserv­ice.apk

Какая версия Андроид?
66. user1478935 05.11.20 12:03 Сейчас в теме
9. При запуске уведомляет http://joxi.ru/Dr8QlQoIMp7a0m , разрешение на перехват не спрашивает
67. SanyMaga 68 05.11.20 16:02 Сейчас в теме
(66)
Это и есть разрешения на перехват. сервис работает?
68. user1478935 05.11.20 16:16 Сейчас в теме
В том то и дело что нет. Срабатывает только нажатие (событие ru.mal.malutilities.onKeyEvent.1). Сканирование не отлавливается. ТСД ATOL Smart.pro
69. SanyMaga 68 05.11.20 16:47 Сейчас в теме
(68)
А сканирование не будет отлавливаться (это не разрыв клавиатуры). Кнопки отрабатывает только физические. Сканирование через "Broadcast". Или через буфер обмена. Что за терминал?

Просто 1с не умеет работать с физическими кнопками если нет фокуса ввода к элементу. Для этого и написан сервис.
70. SanyMaga 68 05.11.20 16:53 Сейчас в теме
(68)
Посмотри та сверху уже есть про ATOL Smart.pro
71. user1478935 05.11.20 17:52 Сейчас в теме
(70) Видел, там как раз такая же ситуация - внешнее событие не отлавливается при сканировании
72. SanyMaga 68 05.11.20 18:06 Сейчас в теме
(71) Скрин настроек скинте.
73. SanyMaga 68 05.11.20 18:10 Сейчас в теме
(71) Эта тема не закрыта человек либо бросил это дело (мой коммент последний), либо у него заработало.
74. SanyMaga 68 05.11.20 18:19 Сейчас в теме
(71) Да и ситуация у вас разная вы пытались поймать события на кнопках через ru_mal_accessibilityserv­ice.apk.
76. user1478935 05.11.20 19:07 Сейчас в теме
(74) Вот здесь не очень понимаю - событие сканирования надо ловить не через ru_mal_accessibilityserv­ice.apk? Я ведь понимаю логику так - в 1с создастся отдельное событие по факту нажатия кнопки и отдельно считывании ШК?
77. SanyMaga 68 06.11.20 12:07 Сейчас в теме
(76) Нет. вы просто первый вопрос задали про AccessibilityService.
75. user1478935 05.11.20 19:03 Сейчас в теме
78. SanyMaga 68 06.11.20 12:21 Сейчас в теме
(75)

К сожалению нет этого аппарата под рукой .

1. Попробуйте поиграть с настройками.
2. Очистить в намерениях категорию "Intent->Category"
3. Попробуйте проверить идет ли броадкаст от сканера, каким то другим приложением например https://play.google.com/store/apps/details?id=com.balda.intenttask&hl=ru
4. Запустить отладку в Android studio.
5. Попробовать настроить через Clipboard.
6. спросить у пользователя "booblich" чем все закончилось у него.
79. prog-1s 55 08.11.20 19:11 Сейчас в теме
День добрый. Не срабатывает загрузка компоненты. Проблема точно не в настройках MIME, другие компоненты загружаются и работают. Что ещё можно проверить?
80. SanyMaga 68 09.11.20 09:36 Сейчас в теме
(79)
Добрый день.
Проверьте.
https://its.1c.ru/db/metod8dev#content:3221:hdoc:_подготовка_внешних_компонент_для_за

Какой андроид? какая платформа? режим запуска? где возникает ошибка при загрузке или при инициализации компоненты.
81. prog-1s 55 09.11.20 18:02 Сейчас в теме
(80) При запуске тестовой конфигурации на эмуляторе Android выдаёт сообщение "Файл не обнаружен..."

При запуске на UROVO i6200A Android 5.1.1, ошибки про файл не выдаёт, но метод ПодключитьВнешнююКомпоненту возвращает Ложь.
Прикрепленные файлы:
83. SanyMaga 68 10.11.20 09:26 Сейчас в теме
(81)
Добавить в manifest name="libru_mal_utilities"
82. SanyMaga 68 10.11.20 09:25 Сейчас в теме
(81)


Добавить в manifest name="libru_mal_utilities"
примерно так.


<?xml version="1.0" encoding="UTF-8"?>

<bundle name="ru_mal_utilities" xmlns="http://v8.1c.ru/8.2/addin/bundle">

<component arch="ARM" type="native" codeType="c++" path="libru_mal_utilities.so" os="Android"  name="libru_mal_utilities"/>

<component arch="ARM" type="native" codeType="java" path="ru_mal_utilities.apk" os="Android" name="libru_mal_utilities"/>

</bundle>
Показать


Потом удалите и добавти базу
84. prog-1s 55 15.11.20 16:12 Сейчас в теме
(82)
Заменил манифест, удалил/создал базу. Результат не изменился - на физическом устройстве ПодключитьВнешнююКомпоненту возвращает Ложь. На эмуляторе "Файл не обнаружен..."
85. SanyMaga 68 16.11.20 09:20 Сейчас в теме
(84)
Посмотрите здесь:
https://forum.infostart.ru/forum28/topic186089/?PAGEN_1=2
или здесь.
https://support.rightscan.ru/ru/communities/1/topics/2907-urovo-dt40-fajl-ne-obnaruzhen-libomniiddsocfl

У меня нет пока ответа. Это файл создает платформа 1С.

Отладку запустили в Android Studio ? (не 1с)
86. tav_74 44 03.01.21 17:38 Сейчас в теме
Добрый день!

Александр, подскажите - в BroadcastEvent.java добавил свою функцию, которую хочу вызывать из TAddInNative::CallAsProc, например по аналогии как Вы это делаете через указатель возвращаемый GetBroadcastEvent.

TBroadcastEvent* cBroadcastEvent = GetBroadcastEvent(paParams->pwstrVal);
 if(cBroadcastEvent){
                    cBroadcastEvent->Send();
                    return true;
}


Но мне не нужно ничего искать, а просто ее вызвать. Подскажите как лучше это сделать ?
87. tav_74 44 04.01.21 12:25 Сейчас в теме
Разобрался, надо было инициализировать через
TBroadcastEvent* cBroadcastEvent = new TBroadcastEvent(this, (IAndroidComponentHelper*) m_iConnect->GetInterface(eIAndroidComponentHelper));
88. user1594361 23.07.21 17:10 Сейчас в теме
Игрался на 8.3.18 и 8.3.16.142 (Android 4.4.2) - компонета не подключается: ПодключитьВнешнююКомпоненту("ОбщийМакет.Макет", "rumalutilities", ТипВнешнейКомпоненты.Native) = Ложь
На Android 4.4.2 сервис не ставится (видимо, устаревшая версия системы для сервиса)
89. SanyMaga 68 26.07.21 09:03 Сейчас в теме
(88)
Во время настройки Web-публикации следует провести следующее действие. В настройках http-сервера необходимо добавить типы MIME для следующих расширений:

.so
.apk
Тип MIME: application/octet-stream/.

Пересоберите проекты(во вложении) под вашу версию Андроид.


(49)
90. НовенькийЯ 28.02.22 10:50 Сейчас в теме
(89)
Во время настройки Web-публикации следует провести следующее действие. В настройках http-сервера необходимо добавить типы MIME для следующих расширений:

.so
.apk
Тип MIME: application/octet-stream/.

Пересоберите проекты(во вложении) под вашу версию Андр

Такая же ерунда, не подключается внешняя компонента.
91. lost1623 08.10.22 21:09 Сейчас в теме
Сервис перехвата кнопок работает, но блок кода с проверкой ответа нет.
//Получили ответ от AccessibilityService значит работает
92. SanyMaga 68 17.10.22 16:03 Сейчас в теме
(91)
Это говорит о том что сервис не работает.
Какая версия андроид?
93. lost1623 17.10.22 19:56 Сейчас в теме
(92)
Версия 10.
События сканера и key.event все работает.
Сервис включен, разрешения даны.
94. SanyMaga 68 18.10.22 10:06 Сейчас в теме
(93)
Вы используете мои цфки?
Если нет то как вы вызываете это событие (это событие не формируется сомо его нужно вызвать)?
95. lost1623 18.10.22 13:27 Сейчас в теме
(94)
Да, использую весь код из cf'ки.
После вызова "Send" ожидаю получить событие подтверждения работы сервиса. Но оно не приходит.
Прикрепленные файлы:
96. SanyMaga 68 20.10.22 14:54 Сейчас в теме
(95)
После сенда нет событий не каких?

Нужно анализировать исходник и искать ошибку.
97. lost1623 20.10.22 17:36 Сейчас в теме
(96)
После сенда ничего нет.
До отладки исходников мб доберусь, когда-нибудь.

Большое спасибо за ваш труд.
98. PrinzOfMunchen 83 10.11.22 13:44 Сейчас в теме
Добрый день.
Устройство Атол Smart.Lite.
Установил ваш сервис, для отлавливания нажатия клавиш. Но по бродкастам приходит пустое сообщение:

<?xml version="1.0" encoding="UTF-8"?>
<MessageData>
<FilterName>ru.mal.malutilities.onKeyEvent.1</FilterName>
<FilterData name="Code"
datatype="6"/>
<FilterData name="Flags"
datatype="6"/>
</MessageData>


В чем может быть причина?
Может быть связано с тем, что апк собрано платформой, без изменений в permission?
100. SanyMaga 68 10.11.22 17:31 Сейчас в теме
(98)
Добрый день.
Что значит пустое сообщение (пустая строка или что - уточните)?

Настройку сервиса делали по средствам броудкастов (ru.mal.accessibilityservice.CONFIG_SERVICE.1)?

// Создаем BROADCAST для AccessibilityService настраиваем его
СтруктураДанных = ОбщийМодульКлиент.СоздатьСтруктуруИзAndroid(Данные);

ЭвентУказатель = глНативКомпонента.CreateBroadcast("ru.mal.accessibilityservice.CONFIG_SERVICE.1", "ТестСервер");


глНативКомпонента.AddStringExtra(ЭвентУказатель, "ACTION_TYPE", 0); // только нажатие там еще 3 события нужно читать в андройде
глНативКомпонента.Send(ЭвентУказатель);
глНативКомпонента.AddStringExtra(ЭвентУказатель, "FLAGS", Истина); // передача флага. кокой нужно исходники смотреть
глНативКомпонента.Send(ЭвентУказатель);
глНативКомпонента.DeleteBroadcastEvent(ЭвентУказатель);
Показать
Оставьте свое сообщение