Обработка нажатия аппаратных кнопок на ТСД в мобильной платформе

11.04.19

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

Обработка и передача события нажатия аппаратных клавиш на Android в мобильную платформу 1С.

Скачать исходный код

Наименование Файл Версия Размер
Обработка нажатия аппаратных кнопок на ТСД в Мобильной платформе:
.zip 9,84Mb
98
.zip 9,84Mb 98 Скачать

Добрый день, коллеги, в моей предыдущей статье "Внешнее событие" и мобильная платформа 1С" я описывал метод, с помощью которого можно передать данные из внешнего сервиса в мобильную платформу 1С. И в комментариях появились вопросы, а как обработать нажатие аппаратных клавиш. Так вот в этой статье я решил поделится своим рецептом. 

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

Все как всегда до безобразия просто, чтобы перехватить нажатие клавиш, мы будем использовать сервис специальных возможностей android "AccessibilityService". А именно обрабатывать событие "onKeyEvent".

Код класса выглядит следующим образом:

package ru.dewersia.getkeyboard;

import android.content.Intent;
import android.os.Handler;
import android.accessibilityservice.AccessibilityService;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.accessibility.AccessibilityEvent;

import static android.view.KeyEvent.ACTION_UP;


public class MyAccessibilityService extends AccessibilityService {

    final String LOG_TAG = "mLog";
	//Имя события, которое будет передаваться в 1С
    public static final String SEND_BARCODE = "ru.dewersia.barcodeDLL.TRUSTCONNECT";
    public Handler mHandler;
    public KeyCharacterMap chMap;

    @Override
    public void onCreate() {

    }

    @Override
    public void onServiceConnected() {

    }

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
		
    }

    @Override
    public void onInterrupt() {
		
    }

    @Override
    protected boolean onKeyEvent(KeyEvent event) {
		//Обработка события нажатия клавиши
        int keyCode = event.getKeyCode();
        int keyAct = event.getAction();

		//Здесь я исключаю коды кнопок, которые не требуется передавать в 1С
        if (keyCode==233 || keyCode==25 || keyCode==24 || keyCode==3){
            return super.onKeyEvent(event);
        }

		//Обработка события KeyUp
        if (keyAct==ACTION_UP){
            Intent intent = new Intent();
            intent.setAction(SEND_BARCODE);
            intent.putExtra("text", ""+keyCode); //Передаем код нажатой кнопки
            intent.putExtra("base", "");
            intent.putExtra("title", "keyboard"); //Передаем имя события
            sendBroadcast(intent);
        }
		
        return super.onKeyEvent(event);
    }

}

Собственно, этот код и решает всю задачу. Исходники всего сервиса прикрепил к публикации.

Сам сервис после установки появится в Настройки - Специальные возможности - НазваниеПриложения. Включаем сервис и все начинает работать. Вот собственно и все. Надеюсь эта информация поможет людям в разработке удобных мобильных приложений на базе мобильной платформы 1С.

 

Тестировалось на мобильной платформе 8.3.9.74, но будет работать и на всех других.

Мобильная платформа аппаратные кнопки android

См. также

Автоматический заказ поставщику в 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 руб.

21.04.2017    90931    108    40    

197

ККТ-ОНЛАЙН 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

6000 руб.

27.02.2017    766466    4694    9501    

2792

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

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

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

8970 руб.

15.12.2015    166426    702    362    

390

Загрузка номенклатуры из 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 руб.

29.10.2014    211132    630    526    

446

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

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

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

2880 руб.

03.12.2018    55045    139    102    

162

54-ФЗ и Разрешительный режим. Обработки для подключения онлайн-касс к 1С 8 (поддержка Маркировки) + Эмулятор + ФФД 1.2

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

Обработка осуществляет обслуживание ККТ АТОЛ, Штрих и Меркурий для конфигураций "УТ 10.3", "КА 1.1", "УПП 1.3", "Розница 1.0", "БП 2.0" и других отраслевых решений, построенных на основе указанных выше конфигурациях. Поддерживает возможность параллельно пробития чеков на одной ККМ несколькими пользователями. Поддерживает Веб-сервер Атол. Соответствует требованиям 54-ФЗ. Поддерживает ФФД 1.0, 1.05, 1.1 и 1.2. Разделяет чеки по нескольким СНО. Поддерживает механизмы подключения ККТ по TCP/IP, для работы через RDP или интернет. Поддержка маркировки и разрешительного режима.

5400 руб.

25.05.2015    318003    1851    3012    

998

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

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

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

104000 руб.

18.03.2019    110655    34    114    

178
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. MarryJane 31 11.04.19 11:25 Сейчас в теме
Скажите, все так же требуется дорабатывать файлик
Android\prjandroid-arm\bin\permissions.xml. Или уже можно не трогать его.
+
2. dewersia 399 11.04.19 19:35 Сейчас в теме
К сожалению пока все так же. Руки никак не дойдут еще раз все разобрать.
+
3. plutonii 18.05.19 01:45 Сейчас в теме
Здравствуйте. Попал в руки интересный ТСД по цене/характеристика Атол SMART.LITE на Андройд 7.
Для него сервис не писали?
Готов поучаствовать в тестировании данного сервиса. Документация и SDK производителя есть. Сервис, который Вы писали для Атол Дройд на Андройде 4 на нем работать не стал, событие не перехватывается.
+
4. dewersia 399 20.05.19 11:55 Сейчас в теме
(3) Добрый день. Странно, а сервис выдает какую-то ошибку при запуске или нет? И приложение собирали сборщиком?
+
5. plutonii 20.05.19 17:34 Сейчас в теме
(4) Добрый. На основе вашей первой публикации был написан драйвер для Смарт.Дройд Атол, событие отрабатывало из 1С. Потом привезли Смарт Лайт - там Андройд другой уже. Приложение под дройд ставится как служба, но событие не срабатывает. Вот по этой ссылке SDK на этот терминал сбора данных https://yadi.sk/d/DOLFmXILYT2gyw
+
7. plutonii 27.05.19 12:15 Сейчас в теме
(5)
Прикрепленные файлы:
+
8. dewersia 399 27.05.19 12:48 Сейчас в теме
(7)Добрый день, пути в разработке лучше использовать только с латинскими буквами. По поводу первого вопроса, я постараюсь посмотреть на этой неделе.
+
17. plutonii 03.06.19 13:23 Сейчас в теме
(8) Здравствуйте. Удалось посмотреть? Без работающего сканера сыпется вся логика приложения 1С в моем вопросе((((
+
18. plutonii 30.07.19 16:49 Сейчас в теме
(8)
Здравствуйте, удалось прикрутить ТСД с мобилке. Событие 1 эской перехватывается при сканировании, но когда приложение открыто( Не могли бы помочь - сделать чтобы приложение запускалось на ТСД как служба? исходники могу скинуть в любое место. Спасибо.
+
28. olejnikov_m 48 08.11.19 11:00 Сейчас в теме
(3) Добрый день. Получилось у вас подключить Атол SMART.LITE на Андройд 7.?
+
6. MORT32Ram 16 27.05.19 07:27 Сейчас в теме
Не работает, служба ставится, включается. В 1С мобильное приложение код добавил, не реагирует.

версия мобильной платформы 8.3.14.53
+
9. dewersia 399 27.05.19 12:50 Сейчас в теме
(6)Добрый день, не забыли поправить файл permissions? И собирали сборщиком?
+
10. MORT32Ram 16 28.05.19 03:06 Сейчас в теме
Здравствуйте, менял несколько раз, ставил через отладку, так же пробовал удалять платформу и ставить ее через апк тоже результата ноль.
Там путь к файлу сейчас другой, такого вида - \mobile_8_3_14_53\Android\prjandroid-arm.zip
+
11. MORT32Ram 16 28.05.19 03:42 Сейчас в теме
(10)Не так немного про путь, в самом prjandroid-arm.zip сейчас папки bin нет, и permissions находится в корне prjandroid-arm.zip не знаю насколько это критично. Сборщиком собирать обязательно?
+
12. dewersia 399 28.05.19 10:25 Сейчас в теме
(11)Да сборщиком собирать обязательно иначе в сам apk не добавляется строчка из permissions. Там идея такая, что в этом файле добавляем intent, который имеет доступ к 1С. дальше все запаковываем обратно и используем эту измененную платформу в сборщике.
+
13. MORT32Ram 16 29.05.19 04:07 Сейчас в теме
(12) Прощу прощения, все работает. Спасибо большое.
+
14. MORT32Ram 16 29.05.19 08:34 Сейчас в теме
Кто нибудь может сталкивался как сделать чтоб это оповещение отрабатывало только при открытой этой форме? сейчас работает в любой другой форме не только в той где код.
+
15. minimajack 80 29.05.19 08:49 Сейчас в теме
(14) ВводДоступен() ?
+
16. MORT32Ram 16 29.05.19 09:15 Сейчас в теме
(15)Точно, спасибо. Туплю.
+
19. Rokstedi 19 25.09.19 18:11 Сейчас в теме
Подскажите, как Вы боритесь с тем что при нажатии клавиши вне 1с(например на рабочем столе андроид) постоянно выскакивает уведомление?
http://prntscr.com/pauz2t
+
22. RFP 11.10.19 03:09 Сейчас в теме
(19)
Попробуйте поставить эту прогрмму от RightScan. Она должна заблочить все уведомления и возможности пользователя полазить по телефону. Будет доступно только то что вы выведете на рабочий стол.
Прикрепленные файлы:
rslauncher2.apk
Instruction.pdf
+
20. RFP 09.10.19 07:26 Сейчас в теме
Правильно ли я понимаю что собирать нужно в Андроид студио? Что то я попробовал, но не собралось ничего. Может есть у кого инструкция как собирать в Андроид студии?
+
21. poteh 10.10.19 11:57 Сейчас в теме
(20) Сервис перехвата клавиш - да, собирается в андроид студии. В целом ничего сложного. Нужно сделать пустой проект без Activity, затем добавить новый java класс и скопировать в него код из статьи.
Насколько я понял, необходимо ещё поправить AndroidManifest.xml чтобы андроид понял что это приложение - AccessibilityService.
Всё, делаем билд, кидаем приложение на устройство и инсталлируем.

А сама 1С с изменённым permissions собирается в сборщике мобильных приложений, который поставляется в архиве вместе с мобильной платформой.

(9) Я прав? AndroidManifest.xml тоже надо править? А то на моём SmartDroid не приходят уведомления. Из оконного приложения удалось передать уведомление в 1С, а через AccessibilityService- пока никак не добьюсь.
У меня получилось следующее:
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

            <service android:name=".MyAccessibilityService"
                android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
                android:label="@string/accessibility_service_label">
                <intent-filter>
                    <action android:name="android.accessibilityservice.AccessibilityService" />
                </intent-filter>
            </service>

    </application>
Показать
+
23. RFP 11.10.19 07:57 Сейчас в теме
(21) Спасибо. Собрать получилось. Но в 1С пока не отлавливается.
+
24. poteh 11.10.19 08:15 Сейчас в теме
(23) Вот такая же беда... Если получится отловить - отпишитесь, пожалуйста.
+
25. RFP 11.10.19 10:59 Сейчас в теме
(24)В отладчике не поймал остановку в ожидаемом мне обработчике "ОбработкаВнешнегоСобытия".

Однако.
1. После того как в файле permission мобильной платформы 1С я убрал пробелы в "<action android:name=" ru.dewersia.barcodeDLL.TRUSTCONNECT " />" (которые случайно за копипастил из другой статьи).
Было:
<LocalNotification>

        <uses-permission android:name="android.permission.VIBRATE"/>

        <target xpath="/manifest/application" >

            <receiver
                android:name="com.e1c.mobile.LocalNotificationReceiver"
                android:enabled="true">

				<intent-filter>
                    <action android:name=" ru.dewersia.barcodeDLL.TRUSTCONNECT  " />
                </intent-filter>
            </receiver>
        </target>
		
    </LocalNotification>
Показать


Стало:
<LocalNotification>

        <uses-permission android:name="android.permission.VIBRATE"/>

        <target xpath="/manifest/application" >

            <receiver
                android:name="com.e1c.mobile.LocalNotificationReceiver"
                android:enabled="true">

				<intent-filter>
                    <action android:name="ru.dewersia.barcodeDLL.TRUSTCONNECT" />
                </intent-filter>
            </receiver>
        </target>
		
    </LocalNotification>
Показать



2. Помимо этого полностью удалил 1С с ТСД, пересобранную без пробелов поставил. И начали появляться номера клавиш в виде уведомлений для приложения 1С.

3. Собрал приложение из исходников за стартмани, а не из кода статьи.

Пока не знаю что сделать, чтобы отловить клавишу в "ОбработкаВнешнегоСобытия", если дойдете до того же места что и я, может у вас что то получится. Пишите, если получиться пожалуйста.
+
26. RFP 11.10.19 12:04 Сейчас в теме
(24)Всё получилось
Добавил следующее:
Процедура ПриНачалеРаботыСистемы()

	

	#Если МобильноеПриложениеКлиент Или МобильноеПриложениеСервер  Тогда
		ДоставляемыеУведомления.ПодключитьОбработчикУведомлений("ПриПолученииУведомления");
	#КонецЕсли

	
КонецПроцедуры

Процедура ПриПолученииУведомления(Уведомление, Локальное, Показано) Экспорт
	
	Если Локальное Тогда
		Сообщить("Прибыло уведомление с текстом: " + Уведомление.Текст);
	Иначе
		Сообщить("Прибыло push-уведомление с текстом: " + Уведомление.Текст);
	КонецЕсли;

КонецПроцедуры

Показать


Всё работает и ловится.
+
27. olejnikov_m 48 08.11.19 10:13 Сейчас в теме
Добрый день. А есть уже готовый apk ? Поделитесь пожалуйста...
+
29. roman.vyalov 31.03.20 18:53 Сейчас в теме
30. roman.vyalov 31.03.20 18:53 Сейчас в теме
Подскажите как собрать apk пожалуйста
+
31. roman.vyalov 31.03.20 21:13 Сейчас в теме
Спасибо. Разобрался. Все заработало!
Просто не поставил в конфигурации разрешение на локальные уведомления.
+
32. yorock 24.07.20 10:39 Сейчас в теме
а для версии платформы 8.3.16.142 нет решения? не найти файл permissions.xml
+
33. AneJIbcuH 37 26.08.20 05:09 Сейчас в теме
Может кто работал с Атол SMART.Droid (android 4.4), кнопки F1 и F2 не реагируют на события, у остальных кнопок есть реакция.
+
34. spartandog 20.08.21 11:53 Сейчас в теме
Собрал сервис, установил, в спец. возможностях служба появилась. Потом изменил в манифесте строчку <action android:name=, пересобрал еще раз и служба уже не появляется. Терминал Атол SMART.Slim.
Подскажете, пожалуйста, в чем проблема. Спасибо.
+
35. user877932 06.03.23 08:36 Сейчас в теме
Здравствуйте.
Подскажите пожалуйста как правильно установить данный сервис на андроид?
+
Оставьте свое сообщение