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

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

См. также

SALE! 15%

Автоматический заказ поставщику в 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С помогает работать с запасами правильно: автоматически рассчитывает потребность и делает заказ поставщику, загружает прайсы, перемещает товары по филиалам, анализирует продажи и позволяет управлять ассортиментом.

33529 28500 руб.

21.04.2017    89869    105    39    

188

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

2780

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

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

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

8970 руб.

15.12.2015    165797    673    361    

385

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

438

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

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

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

2880 руб.

03.12.2018    54435    135    102    

160

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    316010    1839    3007    

990
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 Сейчас в теме
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 Сейчас в теме
Здравствуйте.
Подскажите пожалуйста как правильно установить данный сервис на андроид?
Оставьте свое сообщение