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

13.04.21

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
компонента, сервис, цф и исходники
.zip 11,57Mb
126
126 Скачать (1 SM) Купить за 1 850 руб.

 

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

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 = Булево;

См. также

Сканер штрих-кода Терминал сбора данных Мобильная разработка Монитор заказов Оптовая торговля Розничная торговля Ценообразование, анализ цен Программист Пользователь Платформа 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    96909    584    188    

321

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

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

3000 руб.

03.12.2018    59139    191    103    

172

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

У вас возникал вопрос - Как быстро и правильно выполнить приемку товара в торговой точке? Как минимизировать ошибки при сборке заказа клиента? Текущая разработка способна помочь в решении данных проблем. Её назначение - проверка с помощью сканера штрих кода поступления и реализации товаров, заказов клиентов, заказов поставщикам, расходных и приходных ордеров, перемещений и возвратов.

2400 руб.

29.07.2020    36442    169    159    

141

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

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

4440 руб.

22.06.2020    18087    18    33    

22

Сканер штрих-кода Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Теперь практически все торговые документы в конфигурации 1С Бухгалтерия 3.0 (ПРОФ / КОРП) и в конфигурации 1С Бухгалтерия сельскохозяйственного предприятия 3.0 поддерживают подбор товара по штрих-коду. Можно пользоваться сканером штрихкода или подбирать штрих-код вручную. В основных печатных формах документов выводится колонка Штрихкод. Для менеджеров по продажам будет удобным дополнительный отчет Прайс-лист с остатками и штрих-кодом.

3600 руб.

28.07.2020    29182    79    31    

58

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

Стандартные конфигурации ERP, КА, УТ 11 позволяют работать с штрихкодированием серий. Есть только одно суровое ограничение – на упаковке должна быть этикетка для номенклатуры и отдельно для серии. Во многих случаях это критически неудобно.

12000 руб.

19.04.2021    22726    64    44    

57

Разработка внешних компонент Программист Платформа 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    28142    138    100    

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

На ТСД "ATOL Smart.Lite android 7.0" в приложении "Barcode Utility" , "Scan Setting" -> "Broadcast setting"
6. SanyMaga 69 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 69 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 69 30.06.20 12:14 Сейчас в теме
(11) Почему бы и нет. Должно работать. Не вижу нечего ограничивающего в разрезе Android java sdk
13. booblich 30.06.20 14:43 Сейчас в теме
(12) А если глНативКомпонента.EchoExternalEvent("Проверка"); отрабатывает, внешнее событие отрабатывает, перехват сообщений от сканера ТСД запускается, а внешнего события при сканировании не происходит. В таком случае может быть проблема в чем-то кроме добавленных расширений (AddStringExtra)? На ATOL Smart.Lite все отрабатывает как надо.
14. SanyMaga 69 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 69 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 69 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. Широкий 693 31.08.20 15:07 Сейчас в теме
(17)
application/octet-stream
можно ли подробнее где это прописывается для апача?
51. SanyMaga 69 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 69 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 69 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 69 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 69 15.08.20 10:04 Сейчас в теме
Да кешируется. Нужно пересоздать(удалить из списка и снова добавить) в "1С мобильное приложение" базу или почистить кеш.
28. user592473_damien256 15.08.20 10:55 Сейчас в теме
(27) Дело в том, что я ТСД сбросил до заводских и все установил заново - результат тот же... Ничего не понимаю... Может с сервисом что-то нужно делать еще? Может в Android-Studio что-то нужно еще (я просто сохранаю проект, потом Buld -> Build APK(s))?
29. SanyMaga 69 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 69 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 69 21.08.20 09:37 Сейчас в теме
(31)
Нужно проверить для UTF еcли там BOM
33. user592473_damien256 21.08.20 10:14 Сейчас в теме
(32)
Так в их тестовом приложении работает...
Попробую создать с нуля конфигурацию, собрать компоненту, и подключить к ней. Ну не может быть, что собираю один код, а работает другой...
34. SanyMaga 69 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 34 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 69 23.08.20 09:48 Сейчас в теме
(40) А вы его запустили (запускать в Настройки-Спец. возможности.)? При запуске сервиса нужно дать разрешения.
42. AneJIbcuH 34 23.08.20 10:01 Сейчас в теме
43. AneJIbcuH 34 23.08.20 11:04 Сейчас в теме
(41) не могли бы ещё пояснить момент. Нажимаешь кнопки на ТСД, получаешь код, например 3 - код 10, 5 - код 12 и тд.
Что из себя данный код представляет? А главный вопрос, если разные ТСД (в том числе и модели), коды будут отличаться?
44. SanyMaga 69 23.08.20 11:12 Сейчас в теме
(43)Просто так закодированы кнопки производителем. Я думаю на разных ТСД будут разные коды клавиш.
45. AneJIbcuH 34 23.08.20 11:52 Сейчас в теме
Компонента здоровская!
А в DeviceInfo нельзя добавить текущий IP адрес wi-fi ? :)
46. SanyMaga 69 23.08.20 20:38 Сейчас в теме
49. AneJIbcuH 34 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 69 29.09.20 16:49 Сейчас в теме
57. user592473_damien256 29.09.20 20:33 Сейчас в теме
(56)
Нет, вы не поняли. Все работает (у меня apache) нормально - когда загружена опубликованная конфигурация в мобильную платформу для разработчиков.
Не подключается та же компонента в уже собранном apk, соответственно имеем ошибку "Тип не определен AddIn.rumalutilities.MALutilities" при вызове конструктора
58. SanyMaga 69 30.09.20 10:44 Сейчас в теме
(57)
Я не делал не когда готовый АПК, мне нужна была всегда конфигурация чтоб обновлять ее в процессе работы. Там скорей всего нужно положить в двоичные данные и подключить по другому.
59. user1478935 04.11.20 20:44 Сейчас в теме
А если глНативКомпонента.EchoExternalEvent("Проверка"); отрабатывает, внешнее событие отрабатывает, но ответ от AccessibilityService не приходит - в чем может быть причина?
61. SanyMaga 69 05.11.20 09:24 Сейчас в теме
(59)
Вы его запустили? Сервис->ДопВозможности
60. SanyMaga 69 05.11.20 09:24 Сейчас в теме
Вы его запустили? Сервис->ДопВозможности
62. user1478935 05.11.20 09:59 Сейчас в теме
63. SanyMaga 69 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 69 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 69 05.11.20 16:02 Сейчас в теме
(66)
Это и есть разрешения на перехват. сервис работает?
68. user1478935 05.11.20 16:16 Сейчас в теме
В том то и дело что нет. Срабатывает только нажатие (событие ru.mal.malutilities.onKeyEvent.1). Сканирование не отлавливается. ТСД ATOL Smart.pro
69. SanyMaga 69 05.11.20 16:47 Сейчас в теме
(68)
А сканирование не будет отлавливаться (это не разрыв клавиатуры). Кнопки отрабатывает только физические. Сканирование через "Broadcast". Или через буфер обмена. Что за терминал?

Просто 1с не умеет работать с физическими кнопками если нет фокуса ввода к элементу. Для этого и написан сервис.
70. SanyMaga 69 05.11.20 16:53 Сейчас в теме
(68)
Посмотри та сверху уже есть про ATOL Smart.pro
71. user1478935 05.11.20 17:52 Сейчас в теме
(70) Видел, там как раз такая же ситуация - внешнее событие не отлавливается при сканировании
72. SanyMaga 69 05.11.20 18:06 Сейчас в теме
(71) Скрин настроек скинте.
73. SanyMaga 69 05.11.20 18:10 Сейчас в теме
(71) Эта тема не закрыта человек либо бросил это дело (мой коммент последний), либо у него заработало.
74. SanyMaga 69 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 69 06.11.20 12:07 Сейчас в теме
(76) Нет. вы просто первый вопрос задали про AccessibilityService.
75. user1478935 05.11.20 19:03 Сейчас в теме
78. SanyMaga 69 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 62 08.11.20 19:11 Сейчас в теме
День добрый. Не срабатывает загрузка компоненты. Проблема точно не в настройках MIME, другие компоненты загружаются и работают. Что ещё можно проверить?
80. SanyMaga 69 09.11.20 09:36 Сейчас в теме
(79)
Добрый день.
Проверьте.
https://its.1c.ru/db/metod8dev#content:3221:hdoc:_подготовка_внешних_компонент_для_за

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

При запуске на UROVO i6200A Android 5.1.1, ошибки про файл не выдаёт, но метод ПодключитьВнешнююКомпоненту возвращает Ложь.
Прикрепленные файлы:
83. SanyMaga 69 10.11.20 09:26 Сейчас в теме
(81)
Добавить в manifest name="libru_mal_utilities"
82. SanyMaga 69 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 62 15.11.20 16:12 Сейчас в теме
(82)
Заменил манифест, удалил/создал базу. Результат не изменился - на физическом устройстве ПодключитьВнешнююКомпоненту возвращает Ложь. На эмуляторе "Файл не обнаружен..."
85. SanyMaga 69 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 47 03.01.21 17:38 Сейчас в теме
Добрый день!

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

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


Но мне не нужно ничего искать, а просто ее вызвать. Подскажите как лучше это сделать ?
87. tav_74 47 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 69 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 69 17.10.22 16:03 Сейчас в теме
(91)
Это говорит о том что сервис не работает.
Какая версия андроид?