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

Публикация № 1039819

Программирование - Внешние компоненты

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

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

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

6

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

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

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. MarryJane 23 11.04.19 11:25 Сейчас в теме
Скажите, все так же требуется дорабатывать файлик
Android\prjandroid-arm\bin\permissions.xml. Или уже можно не трогать его.
2. dewersia 324 11.04.19 19:35 Сейчас в теме
К сожалению пока все так же. Руки никак не дойдут еще раз все разобрать.
3. plutonii 18.05.19 01:45 Сейчас в теме
Здравствуйте. Попал в руки интересный ТСД по цене/характеристика Атол SMART.LITE на Андройд 7.
Для него сервис не писали?
Готов поучаствовать в тестировании данного сервиса. Документация и SDK производителя есть. Сервис, который Вы писали для Атол Дройд на Андройде 4 на нем работать не стал, событие не перехватывается.
4. dewersia 324 20.05.19 11:55 Сейчас в теме
(3) Добрый день. Странно, а сервис выдает какую-то ошибку при запуске или нет? И приложение собирали сборщиком?
5. plutonii 20.05.19 17:34 Сейчас в теме
(4) Добрый. На основе вашей первой публикации был написан драйвер для Смарт.Дройд Атол, событие отрабатывало из 1С. Потом привезли Смарт Лайт - там Андройд другой уже. Приложение под дройд ставится как служба, но событие не срабатывает. Вот по этой ссылке SDK на этот терминал сбора данных https://yadi.sk/d/DOLFmXILYT2gyw
Оставьте свое сообщение