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

11.04.19

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Обработка нажатия аппаратных кнопок на ТСД в Мобильной платформе:
.zip 9,84Mb
104
104 Скачать (1 SM) Купить за 1 850 руб.

Добрый день, коллеги, в моей предыдущей статье "Внешнее событие" и мобильная платформа 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С 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    798543    4917    9553    

2863

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

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

8970 руб.

15.12.2015    170976    957    364    

401

ККМ Кассовые операции Розничная торговля Системный администратор Программист Платформа 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 или интернет. Поддержка маркировки и разрешительного режима.

5880 руб.

25.05.2015    336044    1964    3062    

1032

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

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

5000 руб.

27.08.2018    122669    1033    586    

870

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

Система управления запасами для 1С помогает работать с запасами правильно: автоматически рассчитывает потребность и делает заказ поставщику, загружает прайсы, перемещает товары по филиалам, анализирует продажи и позволяет управлять ассортиментом. ВНИМАНИЕ! 09.01.25 г. планируется повышение цен на 20%!

28500 руб.

21.04.2017    96666    130    41    

214

Управление взаимоотношениями с клиентами (CRM) Оптовая торговля Розничная торговля Пользователь Платформа 1С v8.3 Оперативный учет Управляемые формы 1С:Управление торговлей 10 1С:Розница 2 Россия Управленческий учет Платные (руб)

Подсистема призвана упростить и автоматизировать процесс расчета и начисления бонусов покупателей. Бонусная система работает с конфигурациями 1С:УТ 10.3, 1С:Розница. Механизм реализован в начале 2013г. и работает до сих пор с постоянными совершенствованиями.

30000 руб.

02.11.2015    112456    101    88    

185
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. MarryJane 31 11.04.19 11:25 Сейчас в теме
Скажите, все так же требуется дорабатывать файлик
Android\prjandroid-arm\bin\permissions.xml. Или уже можно не трогать его.
2. dewersia 400 11.04.19 19:35 Сейчас в теме
К сожалению пока все так же. Руки никак не дойдут еще раз все разобрать.
3. plutonii 18.05.19 01:45 Сейчас в теме
Здравствуйте. Попал в руки интересный ТСД по цене/характеристика Атол SMART.LITE на Андройд 7.
Для него сервис не писали?
Готов поучаствовать в тестировании данного сервиса. Документация и SDK производителя есть. Сервис, который Вы писали для Атол Дройд на Андройде 4 на нем работать не стал, событие не перехватывается.
4. dewersia 400 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 400 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 44 08.11.19 11:00 Сейчас в теме
(3) Добрый день. Получилось у вас подключить Атол SMART.LITE на Андройд 7.?
6. MORT32Ram 16 27.05.19 07:27 Сейчас в теме
Не работает, служба ставится, включается. В 1С мобильное приложение код добавил, не реагирует.

версия мобильной платформы 8.3.14.53
9. dewersia 400 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 400 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 44 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 40 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 Сейчас в теме
Здравствуйте.
Подскажите пожалуйста как правильно установить данный сервис на андроид?
36. CheBurator 2712 25.07.24 13:38 Сейчас в теме
Автор, посмотрите личку, плиз
Оставьте свое сообщение