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