Управляемый Android Service перехвата сообщений Broadcast со сканера штрих-кодов в 1С (ver. 1.2.2)

19.11.18

Разработка - Мобильная разработка

Service перехвата сообщений Broadcast со сканера штрих-кодов в мобильную платформу 1С (эмуляция внешнего события). Позволяет получать и обрабатывать Штрих-коды не в разрыв клавиатуры (определенное активное окно), а "под капотом". Поддержка запуска/остановки из программного кода 1С.

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

Наименование Файл Версия Размер
BarCodeComponent_ver_1_2_2.apk
.apk 49,75Kb
269
.apk 1.2.2 49,75Kb 269 Скачать
BC2OneC_sources.zip
.zip 47,62Kb
107
.zip 1.2.1 47,62Kb 107 Скачать

ВНИМАНИЕ! Компонента не имеет видимого интерфейса. При попытке запустить через иконку ничего происходить не будет!

Работает с мобильной платформой не выше 8.3.11

Предыстория создания //infostart.ru/public/586539/ (сначала ознакомиться)

На том этапе был создан сервис, который "жил сам по себе", запускался при старте системы, имел интерфейс и ручные настройки. Мне это показалось не достаточно удобным. Родилась идея отдельной компоненты. Она похожа на предыдущую, но управляется из 1С, не имеет интерфейса с настройками.

В модуль управляемого приложения прописываем:

Процедура ПриНачалеРаботыСистемы()
	
	ОбщегоНазначенияКлиент.ПодключитьГлобальноеСобытиеОповещения();
	ОбщегоНазначенияКлиент.ЗапуститьКомпонентуСканирования();
	
КонецПроцедуры

Процедура ПриЗавершенииРаботыСистемы()
	ОбщегоНазначенияКлиент.ОстановитьКомпонентуСканирования();
КонецПроцедуры

В модуль ОбщегоНазначенияКлиент

Процедура ПодключитьГлобальноеСобытиеОповещения() Экспорт
	#Если МобильноеПриложениеКлиент Тогда
		Оп = Новый ОписаниеОповещения("ОбработчикЛокальныхУведомлений", ЭтотОбъект);
		ДоставляемыеУведомления.ПодключитьОбработчикУведомлений(Оп);  
	#КонецЕсли
КонецПроцедуры

Процедура ГлобальноеСобытиеОповещения(Сообщение, ЧтоТоЕще = "") Экспорт

	Попытка
		Отправитель = Число(Сообщение.Отправитель);
	Исключение
		Возврат
	КонецПопытки;
	Если Отправитель = 1 Тогда
		Оповестить(Формат(Отправитель,"ЧГ="),Сообщение.Текст, "Сканирование ШК");
	Иначе 
		Возврат
	КонецЕсли;
КонецПроцедуры

Процедура ОбработчикЛокальныхУведомлений(Уведомление,Локальное,Показано, ЧтоТоЕще) Экспорт
	ГлобальноеСобытиеОповещения(Новый Структура("Отправитель,Текст",Уведомление.Текст,Уведомление.Данные));
КонецПроцедуры

&НаКлиенте
Процедура ЗапуститьКомпонентуСканирования() Экспорт
	#Если МобильноеПриложениеКлиент Тогда
		НовЗП = Новый ЗапускПриложенияМобильногоУстройства();
		НовЗП.Действие = "com.barcodeto1c.action";
		НовЗП.ДополнительныеДанные.Добавить("ServiceState","Start"); //что сделать: Старт/Стоп
		НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","scan.rcv.message"); //чей бродкаст ловить
        НовЗП.ДополнительныеДанные.Добавить("ServiceBarCodeField","barocode"); //в каком поле сканер возвращает штрих-код (если не задавать - по умолчанию barocode, что в большинстве случаев оно так)
		НовЗП.ДополнительныеДанные.Добавить("ServiceEventID","1"); //категория сообщение для 1С
		НовЗП.ДополнительныеДанные.Добавить("ServiceToast","Service STARTED!");//(не обязательно) просто покажет Тост при успехе
		НовЗП.ДополнительныеДанные.Добавить("ServiceBase_Name",ОбщегоНазначенияСервер.ПолучитьИДБазы());//если одна база - можно поставить ""
		Результат = НовЗП.Запустить(Истина);
		
		Если НЕ Результат = 77 Тогда
             //тут можно отловить что что-то не так. Возможно апк не установлена или что-то не сработало
		КонецЕсли;
	#КонецЕсли
	
КонецПроцедуры

&НаКлиенте
Процедура ОстановитьКомпонентуСканирования() Экспорт
	#Если МобильноеПриложениеКлиент Тогда
		НовЗП = Новый ЗапускПриложенияМобильногоУстройства();
		НовЗП.Действие = "com.barcodeto1c.action";
		НовЗП.ДополнительныеДанные.Добавить("ServiceState","Stop");
		НовЗП.ДополнительныеДанные.Добавить("ServiceToast","Service STOPED!");
		Результат = НовЗП.Запустить(Истина);
	#КонецЕсли

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

ПолучитьИДБазы() можно разными способами. Я её прописал в константы.

Успешный результат всегда равен 77 (просто число, мне так захотелось)

У формы должно быть прописано ОбработкаОповещения приблизительно так:

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	Если ИмяСобытия = "1" И ВводДоступен() Тогда
		ПолученШтрихКод(Параметр); //процедура для обработки ШК
	КонецЕсли;
КонецПроцедуры

 

Теперь мы можем стартовать сервис только по необходимости. Если у нас несколько баз - то ловить события только той базой, что запущена.

Распространяется "как есть". Надеюсь будет полезным.

Добавлено в версии 1.1

1) сервис может работать с некоторыми bluetooth-сканерами (у которых для настройки используется утилита DataWedge со строкой "посылки" com.hht.emdk.datawedge.data_string)

2) добавлена возможность самостоятельно указывать поле, в котором возвращается набор байт со сканера. По-умолчанию это "barocode". Если сервису передать строку НовЗП.ДополнительныеДанные.Добавить("ServiceBarCodeField","svoe_pole") - то информация будет читаться из него

Оптимизация по размеру файла. А то жрала много памяти предыдущая ;)

Добавлено в версии 1.2.1

- Поддержка устройства CipherLab 9700A (ну и наверное его подобными)

28/03/18 Добавлены исходники

 

Добавлено в версии 1.2.2

- Поддержка устройств, которые возвращают штрих-код как строку, а не массив байт.

Внешнее событие Штрих-код сервис Broadcast Мобильное приложение Service

См. также

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

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

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

2880 руб.

03.12.2018    55076    139    102    

162

SALE! 25%

Что нам стоит бота построить? Нарисуем - будет жить! Графический конструктор телеграм-ботов/Telegram

Мобильная разработка Мессенджеры и боты Платформа 1С v8.3 Платные (руб)

Теперь создать telegram-бота - элементарно. Достаточно просто нарисовать блок-схему телеграм-бота, и он сразу заработает. Это возможно при использовании Графического конструктора телеграм-ботов. Это единственный конструктор ботов для telegram, чье качество и функционал подтверждены фирмой 1С, есть сертификат 1С:Совместимо. Расширение в интерактивном режиме, с помощью блок-схем, позволяет с минимальными трудозатратами создать телеграм-ботов в любой конфигурации, работающей на платформе «1С:Предприятие 8.3».

13200 9900 руб.

27.12.2021    33822    82    159    

177

"Мобильный ТСД" - инвентаризация и сбор штрихкодов для iOS и Android

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

Простой мобильный терминал сбора данных для смартфонов на iOS и Android, не требующий сложных настроек и установки дополнительных программ. Обмен между Вашей 1С и мобильным приложением осуществляется через облачный сервис и расширение конфигурации. Работает с конфигурациями УТ 11, ERP, КА2, Розница 2, Розница 3, УНФ 1.6, УНФ 3.0. Полнофункциональный демо-доступ для своей конфигурации можно запросить в настройках мобильного приложения - все необходимое придет на почту автоматически.

2000 руб.

22.04.2019    92401    520    186    

297

Магазин 15 - приемка товара по штрихкодам или инвентаризация в торговом зале

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

Специализированное программное обеспечение для мобильных устройств со встроенным сканером штрихкодов. Позволяет быстро автоматизировать, оптимизировать рабочие места и бизнес процессы по учету товара в магазине. Например, приемку товара по штрихкодам или инвентаризацию прямо в торговом зале.

12950 руб.

30.05.2023    3464    2    0    

4

Работа с графикой в браузере (SimpleWEB). Векторный редактор

Мобильная разработка WEB-интеграция Мобильная платформа Абонемент ($m)

В SimpleWEB добавились средства для работы с графикой и отслеживание событий мыши, в онлайн редактор https://seditor.ru:1555/ добавился «Векторный редактор» на этом API. Теперь можно нарисовать схемы складов на ПК, сделать карты (*.sug-файлы) для мобильной платформы SimpleUI, выводить данные из 1С в графическом виде. Таким образом, API для работы с векторными файлами теперь есть и в веб- и в мобильной платформе, а также средства для создания и редактирования векторных файлов есть тоже в обеих платформах.

1 стартмани

20.03.2024    1632    0    informa1555    1    

41

Зачем нам 1С:Элемент

Мобильная разработка Языки и среды Бесплатно (free)

Flutter может быть использован с 1С:Предприятием для разработки кроссплатформенных мобильных приложений, обеспечивая единый интерфейс и функциональность на устройствах под управлением iOS и Android. Это позволяет создавать приложения с высокой производительностью благодаря использованию собственного движка рендеринга Flutter. Интеграция Flutter с 1С:Предприятием позволяет создавать мобильные приложения любого уровня сложности, интегрировать их в корпоративные информационные системы, а также реализовывать бизнес-логику

19.03.2024    9434    ROk_dev    67    

41

JavaScript в Simple

Мобильная разработка Бесплатно (free)

В SimpleUI и SimpleWEB, наряду с обработчиками на python и онлайн (1С и т.д.) добавляется интерпретатор JavaScript. В андроид платформе он скорее играет на поле python, т.к. является оффлайновым решением для самостоятельной обработки и расширяет аудиторию разработчиков для разработки самостоятельных решений. Дополнение к основной статье https://infostart.ru/1c/tools/1153616/

12.02.2024    1693    informa1555    0    

25
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
86. DMon 120 15.02.18 12:54 Сейчас в теме
(85) Сложно сказать не имея оборудование под рукой. Компонента для ТСД, а не внешних сканеров.
Надо только экспериментировать.
87. hobi 616 06.03.18 15:51 Сейчас в теме
Добрый день.
При работе с ТСД Honeywall EDA50 (Android 7.1.1) сервис вылетает с ошибкой:
'В работе приложения BarCode_to_1C' by DMondi произошел сбой.

В настройках ТСД установлены флаги:
- Scan To Intent
- Data Intent
Для Data Intent в поле Action указано: scan.rcv.message , остальные поля не заполнены
88. DMon 120 06.03.18 20:32 Сейчас в теме
(87) Александр, на 7.1.1 не тестировалось приложение.
Чтоб отладить (или хотя бы просмотреть logcat), подходящего устройства нет, а эмулятор - совсем не вариант.

При всем желании ничем помочь не могу.
В будущем компания планирует закупить ТСД с андроид 7, но когда это будет пока не известно.
152. KBNIKKB 26.11.18 14:44 Сейчас в теме
(88) то есть не факт что это будет работать на 7 андройде ? а точнее 7.1.2
89. hellslade 13.03.18 13:41 Сейчас в теме
(87) У нас такой же терминал, там сканер возвращает баркод как строку, а не набор байт, как этого ожидает приложение. Надо править код.
123. arcadics 13 23.08.18 13:55 Сейчас в теме
(87)

для EDA50 имя поля нужно указать "dataBytes"

см. 70
144. s.kochnev 12.11.18 07:39 Сейчас в теме
(87) В конечном итоге получилось завести приложение на EDA50 с 7.1.1?
145. user1041486 12.11.18 08:02 Сейчас в теме
(144) у меня пока не получилось.
Oliver; zhernikov; +2 Ответить
146. hobi 616 12.11.18 21:48 Сейчас в теме
(144) Получилось, внешнюю компоненту подключил: https://infostart.ru/public/779912/ .
Заработал и EDA50 и M3 (SM15).
s.kochnev; +1 Ответить
147. s.kochnev 13.11.18 07:35 Сейчас в теме
(146) Спасибо за информацию и ссылку, не видел той публикации раньше.
90. OldthiefXXX 153 11.05.18 10:35 Сейчас в теме
Ребят подскажите ТСД Атол Smart Droid
в настройках как уже писали тут ставлю.

НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","DATA_SCAN");
1С ка ловит событие и пшет "Уведомление для неизвестного приложения 1"

Разобронное приложение демо
package com.hht.demo;

import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;

public class SDLguiActivity
  extends Activity
{
  static final Uri CONTENT_URI = Uri.parse("content://com.oem.startup.ScannerParaProvider/settings");
  static String PROPERTY_DEVICE_BEEP = "Device_Beep";
  static String PROPERTY_DEVICE_VIBRATE = "Device_Vibrate";
  static final String PROVIDER_NAME = "com.oem.startup.ScannerParaProvider";
  static final String URL = "content://com.oem.startup.ScannerParaProvider/settings";
  static SDLguiActivity app = null;
  private static TriggerThread mTriggerThread;
  private boolean beepMode = false;
  private Button buttonCodeParam;
  private Button buttonDfl;
  private Button buttonProp;
  private CheckBox chBeep = null;
  private CheckBox chVibrate = null;
  private int decodes = 0;
  private BarcodeDataBroadcastReceiver intentBarcodeDataReceiver = new BarcodeDataBroadcastReceiver(null);
  View.OnClickListener mCheckBeepListener = new View.OnClickListener()
  {
    public void onClick(View paramAnonymousView)
    {
      SDLguiActivity.this.beepMode = ((CheckBox)paramAnonymousView).isChecked();
      paramAnonymousView = new Intent();
      paramAnonymousView.setAction("com.hht.emdk.datawedge.api.ACTION_SOFTSCANTRIGGER");
      if (SDLguiActivity.this.beepMode) {
        paramAnonymousView.putExtra("com.hht.emdk.datawedge.api.EXTRA_PARAMETER", "ENABLE_BEEP");
      }
      for (;;)
      {
        SDLguiActivity.app.sendBroadcast(paramAnonymousView);
        return;
        paramAnonymousView.putExtra("com.hht.emdk.datawedge.api.EXTRA_PARAMETER", "DISABLE_BEEP");
      }
    }
  };
  View.OnClickListener mCheckVibrateListener = new View.OnClickListener()
  {
    public void onClick(View paramAnonymousView)
    {
      SDLguiActivity.this.vibrateMode = ((CheckBox)paramAnonymousView).isChecked();
      paramAnonymousView = new Intent();
      paramAnonymousView.setAction("com.hht.emdk.datawedge.api.ACTION_SOFTSCANTRIGGER");
      if (SDLguiActivity.this.vibrateMode) {
        paramAnonymousView.putExtra("com.hht.emdk.datawedge.api.EXTRA_PARAMETER", "ENABLE_VIBRATE");
      }
      for (;;)
      {
        SDLguiActivity.app.sendBroadcast(paramAnonymousView);
        return;
        paramAnonymousView.putExtra("com.hht.emdk.datawedge.api.EXTRA_PARAMETER", "DISABLE_VIBRATE");
      }
    }
  };
  View.OnClickListener mCodeSettingListener = new View.OnClickListener()
  {
    public void onClick(View paramAnonymousView)
    {
      paramAnonymousView = new Intent(SDLguiActivity.this, CodeSetting.class);
      SDLguiActivity.this.startActivity(paramAnonymousView);
    }
  };
  View.OnClickListener mDecodeListener = new View.OnClickListener()
  {
    public void onClick(View paramAnonymousView)
    {
      SDLguiActivity.StopScanner();
      SDLguiActivity.StartScanner();
    }
  };
  View.OnClickListener mDefaultListener = new View.OnClickListener()
  {
    public void onClick(View paramAnonymousView)
    {
      paramAnonymousView = new Intent();
      paramAnonymousView.setAction("com.hht.emdk.datawedge.api.ACTION_SCANNERINPUTPLUGIN");
      paramAnonymousView.putExtra("com.hht.emdk.datawedge.api.EXTRA_PARAMETER", "SET_DEFAULT_SETTING");
      SDLguiActivity.app.sendBroadcast(paramAnonymousView);
    }
  };
  View.OnClickListener mPropListener = new View.OnClickListener()
  {
    public void onClick(View paramAnonymousView)
    {
      SDLguiActivity.this.doGetProp();
    }
  };
  private TextView tvData = null;
  private TextView tvStat = null;
  private boolean vibrateMode = false;
  
  public SDLguiActivity()
  {
    app = this;
  }
  
  public static void StartScanner()
  {
    Intent localIntent = new Intent();
    localIntent.setAction("com.hht.emdk.datawedge.api.ACTION_SOFTSCANTRIGGER");
    localIntent.putExtra("com.hht.emdk.datawedge.api.EXTRA_PARAMETER", "START_SCANNING");
    app.sendBroadcast(localIntent);
  }
  
  public static void StopScanner()
  {
    Intent localIntent = new Intent();
    localIntent.setAction("com.hht.emdk.datawedge.api.ACTION_SOFTSCANTRIGGER");
    localIntent.putExtra("com.hht.emdk.datawedge.api.EXTRA_PARAMETER", "STOP_SCANNING");
    app.sendBroadcast(localIntent);
  }
  
  private void doGetProp()
  {
    AlertDialog.Builder localBuilder = new AlertDialog.Builder(this);
    if (localBuilder != null)
    {
      localBuilder.setTitle("HHT ScanDemo");
      localBuilder.setMessage("Version 2.3\r\nCopyright 2015\t\t");
      localBuilder.setPositiveButton("ok", null);
      localBuilder.show();
    }
  }
  
  private void dspData(String paramString)
  {
    this.tvData.setText("  ");
    this.tvData.setText(paramString);
  }
  
  private void dspErr(String paramString)
  {
    this.tvStat.setText("ERROR " + paramString);
  }
  
  private void dspStat(int paramInt)
  {
    this.tvStat.setText("  ");
    this.tvStat.setText(paramInt);
  }
  
  private void dspStat(String paramString)
  {
    this.tvStat.setText(paramString);
  }
  
  private void getDeviceSetting()
  {
    Cursor localCursor = getContentResolver().query(CONTENT_URI, null, null, null, null);
    localCursor.getColumnCount();
    int i = localCursor.getCount();
    localCursor.moveToFirst();
    if (i <= 0) {
      return;
    }
    String str1 = localCursor.getString(localCursor.getColumnIndex("scanner_name"));
    String str2 = localCursor.getString(localCursor.getColumnIndex("scanner_para"));
    if (str1.equals(PROPERTY_DEVICE_BEEP)) {
      if (str2.equals("enabled"))
      {
        bool = true;
        this.beepMode = bool;
      }
    }
    while (!str1.equals(PROPERTY_DEVICE_VIBRATE)) {
      for (;;)
      {
        localCursor.moveToNext();
        i -= 1;
        break;
        bool = false;
      }
    }
    if (str2.equals("enabled")) {}
    for (boolean bool = true;; bool = false)
    {
      this.vibrateMode = bool;
      break;
    }
  }
  
  public void DisableJanamScanner()
  {
    Intent localIntent = new Intent();
    localIntent.setAction("com.hht.emdk.datawedge.api.ACTION_SOFTSCANTRIGGER");
    localIntent.putExtra("com.hht.emdk.datawedge.api.EXTRA_PARAMETER", "DISABLE_TRIGGERBUTTON");
    app.sendBroadcast(localIntent);
    localIntent = new Intent();
    localIntent.setAction("com.hht.emdk.datawedge.api.ACTION_SCANNERINPUTPLUGIN");
    localIntent.putExtra("com.hht.emdk.datawedge.api.EXTRA_PARAMETER", "DISABLE_PLUGIN");
    app.sendBroadcast(localIntent);
  }
  
  public void EnableJanamScanner()
  {
    Intent localIntent = new Intent();
    localIntent.setAction("com.hht.emdk.datawedge.api.ACTION_SCANNERINPUTPLUGIN");
    localIntent.putExtra("com.hht.emdk.datawedge.api.EXTRA_PARAMETER", "ENABLE_PLUGIN");
    app.sendBroadcast(localIntent);
    localIntent = new Intent();
    localIntent.setAction("com.hht.emdk.datawedge.api.ACTION_SOFTSCANTRIGGER");
    localIntent.putExtra("com.hht.emdk.datawedge.api.EXTRA_PARAMETER", "ENABLE_TRIGGERBUTTON");
    app.sendBroadcast(localIntent);
  }
  
  public void onCreate(Bundle paramBundle)
  {
    super.onCreate(paramBundle);
    setContentView(2130903043);
    ((Button)findViewById(2131099654)).setOnClickListener(this.mDecodeListener);
    ((Button)findViewById(2131099655)).setOnClickListener(this.mCodeSettingListener);
    ((Button)findViewById(2131099657)).setOnClickListener(this.mDefaultListener);
    ((Button)findViewById(2131099658)).setOnClickListener(this.mPropListener);
    ((CheckBox)findViewById(2131099656)).setOnClickListener(this.mCheckBeepListener);
    ((CheckBox)findViewById(2131099659)).setOnClickListener(this.mCheckVibrateListener);
    getDeviceSetting();
    this.tvStat = ((TextView)findViewById(2131099652));
    this.tvData = ((TextView)findViewById(2131099653));
    this.chBeep = ((CheckBox)findViewById(2131099656));
    this.chBeep.setChecked(this.beepMode);
    this.chVibrate = ((CheckBox)findViewById(2131099659));
    this.chVibrate.setChecked(this.vibrateMode);
    this.buttonCodeParam = ((Button)findViewById(2131099655));
    this.buttonDfl = ((Button)findViewById(2131099657));
    this.buttonProp = ((Button)findViewById(2131099658));
    paramBundle = new IntentFilter("DATA_SCAN");
    registerReceiver(this.intentBarcodeDataReceiver, paramBundle);
  }
  
  public void onDecodeComplete(int paramInt1, int paramInt2, String paramString)
  {
    if (paramInt2 > 0)
    {
      this.decodes += 1;
      dspStat("[" + this.decodes + "] type: " + paramInt1 + " len: " + paramInt2);
      dspData(paramString);
      return;
    }
    dspData("");
  }
  
  protected void onPause()
  {
    DisableJanamScanner();
    super.onPause();
  }
  
  protected void onResume()
  {
    super.onResume();
    EnableJanamScanner();
  }
  
  private class BarcodeDataBroadcastReceiver
    extends BroadcastReceiver
  {
    private BarcodeDataBroadcastReceiver() {}
    
    public void onReceive(Context paramContext, Intent paramIntent)
    {
      paramContext = paramIntent.getStringExtra("com.hht.emdk.datawedge.data_string");
      int i = paramIntent.getIntExtra("com.hht.emdk.datawedge.data_type", 0);
      int j = paramIntent.getIntExtra("com.hht.emdk.datawedge.data_length", 0);
      SDLguiActivity.this.onDecodeComplete(i, j, paramContext);
    }
  }
  
  public static class TriggerThread
    extends Thread
  {
    private boolean runnable = false;
    
    public void run()
    {
      super.run();
      for (;;)
      {
        if (isInterrupted()) {
          return;
        }
        SDLguiActivity.StopScanner();
        SDLguiActivity.StartScanner();
        try
        {
          Thread.sleep(2000L);
        }
        catch (InterruptedException localInterruptedException)
        {
          Thread.currentThread().interrupt();
        }
      }
    }
    
    public void setRun(boolean paramBoolean)
    {
      this.runnable = paramBoolean;
    }
  }
}
Показать



Не могу поймать штрихкод
		НовЗП.Действие = "com.barcodeto1c.action";
		НовЗП.ДополнительныеДанные.Добавить("ServiceState","Start"); //что сделать: Старт/Стоп
		НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","DATA_SCAN"); //чей бродкаст ловить
		//НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","scan.rcv.message"); //чей бродкаст ловить
        НовЗП.ДополнительныеДанные.Добавить("ServiceBarCodeField","data_string"); //в каком поле сканер возвращает штрих-код (если не задавать - по умолчанию barocode, что в большинстве случаев оно так)
		НовЗП.ДополнительныеДанные.Добавить("ServiceEventID","1"); //категория сообщение для 1С
		НовЗП.ДополнительныеДанные.Добавить("ServiceToast","Service STARTED...!");//(не обязательно) просто покажет Тост при успехе
		НовЗП.ДополнительныеДанные.Добавить("ServiceBase_Name","");//если одна база - можно поставить "
91. OldthiefXXX 153 11.05.18 11:09 Сейчас в теме
Все разобрался все правильно настроено.
92. user617789_sercomp 15.05.18 09:10 Сейчас в теме
Люди, помогите.
Не могу поймать внешнее события. ТСД Newland MT6550 в документации написано

3. Output via API: Application acquires scanned data by registering a broadcast receiver and listening for
specific broadcast intents.
 Broadcast: nlscan.action.SCANNER_RESULT
To get barcode data.
 Extra scan result 1 parameter: SCAN_BARCODE1
To get the data of the first barcode.
Type: String

мой код
НовЗП.Действие = "com.barcodeto1c.action";//com.barcodeto1c.action
		НовЗП.ДополнительныеДанные.Добавить("ServiceState","Start");
		//nlscan.action.SCANNER_RESULT 
		НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","nlscan.action.SCANNER_RESULT");
                НовЗП.ДополнительныеДанные.Добавить("ServiceBarCodeField","SCAN_BARCODE1"); 
		НовЗП.ДополнительныеДанные.Добавить("ServiceEventID","1"); 
		НовЗП.ДополнительныеДанные.Добавить("ServiceToast","Service STARTED!");
		НовЗП.ДополнительныеДанные.Добавить("ServiceBase_Name",CommonDestinatieServer.GetIndentificatorInfoBase());
		Результат = НовЗП.Запустить(Истина);
Показать


Результат = 77

что я делаю не так?
93. DMon 120 15.05.18 12:47 Сейчас в теме
(92)
что я делаю не так?


Форма, куда сканируется, имеет обработчик оповещения?

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	Если ИмяСобытия = "1" И ВводДоступен() Тогда
		ПолученШтрихКод(Параметр); //процедура для обработки ШК
	КонецЕсли;
КонецПроцедуры
94. user617789_sercomp 15.05.18 13:56 Сейчас в теме
Имеет.

В отлачике поставил точку остановке в процедуре ГлобальноеСобытиеОповещения. Не работает.

Ниже код SDK производителя

package com.example.scan.setting.test;

import java.util.Map;
import java.util.Random;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.TextView;

import com.nlscan.android.scan.ScanManager;
import com.nlscan.android.scan.ScanSettings;

public class MainActivity extends Activity {

	private TextView tv_broadcast_result;
	private EditText et_emulator_result;
	private RadioGroup radio_group;
	private Button btn_reset;
	
	private ScanManager mScanMgr;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mScanMgr=ScanManager.getInstance();
		initView();
	}
	
	private void initView()
	{
		tv_broadcast_result=(TextView)findViewById(R.id.tv_broadcast_result);
		et_emulator_result=(EditText)findViewById(R.id.et_emulator_result);
		radio_group=(RadioGroup)findViewById(R.id.radio_group);
		btn_reset=(Button)findViewById(R.id.btn_reset);
		btn_reset.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View view) {
				et_emulator_result.setText("");
				tv_broadcast_result.setText("广播输出的结果显示区");
				tv_broadcast_result.setTextColor(getResources().getColor(android.R.color.black));
			}
		});
		
		//可选的输出模式设置
		radio_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				
				int outputMode=-1;
				
				switch (checkedId) {
				
				//广播方式输出
				case R.id.radio_broadcast:
					outputMode=ScanSettings.Global.VALUE_OUT_PUT_MODE_BROADCAST;
					break;
					
				//模拟键方式输出
				case R.id.radio_emulate_key:
					outputMode=ScanSettings.Global.VALUE_OUT_PUT_MODE_EMULATE_KEY;
					break;
				
				//直接填充
				case R.id.radio_fill:
					outputMode=ScanSettings.Global.VALUE_OUT_PUT_MODE_FILLING;
					break;
				}
				
				if(outputMode!=-1)
					mScanMgr.setOutpuMode(outputMode);
			}
		});
		
		//获取所有的通用设置
		Map<String, String> settings=mScanMgr.getScanSettings();
		String sOutputMode=settings.get(ScanSettings.Global.OUT_PUT_MODE); //获取当前输出方式
		int iOutputMode=Integer.parseInt(sOutputMode);
		switch (iOutputMode) {
		case ScanSettings.Global.VALUE_OUT_PUT_MODE_BROADCAST:
			radio_group.check(R.id.radio_broadcast);
			break;
		case ScanSettings.Global.VALUE_OUT_PUT_MODE_EMULATE_KEY:
			radio_group.check(R.id.radio_emulate_key);
			break;
		case ScanSettings.Global.VALUE_OUT_PUT_MODE_FILLING:
			radio_group.check(R.id.radio_fill);
			break;
		}
		
	}
	
	private void registerReceiver()
	{
		IntentFilter intFilter;
		intFilter = new IntentFilter(ScanManager.ACTION_SEND_SCAN_RESULT);
		registerReceiver(mResultReceiver, intFilter);
	}
	
	private void unRegisterReceiver()
	{
		try {
			unregisterReceiver(mResultReceiver);
		} catch (Exception e) {
		}
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		unRegisterReceiver();
	}

	@Override
	protected void onResume() {
		super.onResume();
		registerReceiver();
	}
	
	/**
	 * 监听扫码数据的广播,当设置广播输出时作用该方法获取扫码数据
	 */
	private BroadcastReceiver mResultReceiver=new BroadcastReceiver() {
		
		@Override
		public void onReceive(Context context, Intent intent) {
			String action=intent.getAction();
			if(ScanManager.ACTION_SEND_SCAN_RESULT.equals(action)){
				byte[] bvalue1=intent.getByteArrayExtra(ScanManager.EXTRA_SCAN_RESULT_ONE_BYTES);
				byte[] bvalue2=intent.getByteArrayExtra(ScanManager.EXTRA_SCAN_RESULT_TWO_BYTES);
				String svalue1=null;
				String svalue2=null;
				try {
					if(bvalue1!=null)
						svalue1=new String(bvalue1,"GBK");
					if(bvalue2!=null)
						svalue2=new String(bvalue1,"GBK");
					svalue1=svalue1==null?"":svalue1;
					svalue2=svalue2==null?"":svalue2;
					tv_broadcast_result.setText(svalue1+"\n"+svalue2);
				} catch (Exception e) {
					e.printStackTrace();
					tv_broadcast_result.setText("data encode failed.");
				}
				
				Random random = new Random();
				tv_broadcast_result.setTextColor(Color.argb(255, random.nextInt(256),
	                    random.nextInt(256), random.nextInt(256)));
			}
		}
	};
	
}

Показать
95. DMon 120 15.05.18 21:34 Сейчас в теме
(94) К сожалению, я не телепат. Вы можете посмотреть исходники компоненты.
У большинства работает без проблем.
96. anderson 230 16.05.18 11:09 Сейчас в теме
Добрый день . Подскажите как можно отловить ошибку при отправке штрих кода в вашей компоненте в случае нескольких баз.
По вашему примеру прописываю
НовЗП.ДополнительныеДанные.Добавить("ServiceBase_Name",ОбщегоНазначенияСервер.ПолучитьИДБазы());

ИдБазы прописан из файла ibases.v8i в виде 3387edd5-2ed2-485b-a373-252980a29a08. при этом все равно выскакивает сообщение "Уведомление для неизвестного приложения "3387edd5-2ed2-485b-a373-252980a29a08".
В случае одной базы все работает прекрасно , указывая пустой ИД базы.
97. DMon 120 16.05.18 17:41 Сейчас в теме
(96) Если делать как описано в сообщении (57) - отрабатывает корректно (по крайне мере у меня)
100. frutty 123 14.06.18 14:38 Сейчас в теме
В новой версии платформы видимо сменился идентификатор приложений, компонента перестала уведомления слать.
101. gunkata 16.06.18 16:26 Сейчас в теме
Кто подскажет как можно перехватывать нажатие физической клавиатуры на ТСД Атол Smart Droid. Сканер ШК отлично запустился. Теперь хочется в любой момент перехватывать клавиатуру? Что бы при нажатии клавиши, вызвалось ОбработкаОповещения или ВнешнееСобытие.?
Спасибо.
103. Vortigaunt 96 05.07.18 12:18 Сейчас в теме
Вопрос автору. Сидели полчаса в Android Device Monitor искали проблему, почему не работает ваш сервис и нашли.
07-05 16:58:29.682: W/Bundle(2539): Key SCAN_BARCODE1 expected byte[] but value was a java.lang.String.  The default value <null> was returned.


Наш сканер возвращает в Extra SCAN_BARCODE1 тип Srting, а ваш сервис ожидает массив байтов? Можно добавить какое-нибудь преобразование, чтобы заработало?
Кстати с подобным ТСД (Newland) тут уже спрашивали, но причину не нашли. Причина как раз в том, что не совпадают типы данных.
104. DMon 120 05.07.18 17:50 Сейчас в теме
(103) Да, такое обсуждалось. Сразу поддержку всех ТСД/Сканеров описать (в т.ч. полей, типов данных и т.д. нет возможности). Для подобных ситуаций выложены исходники. У Вас полное право переписать их под свои нужды. Немного повторюсь: Распространяется "как есть" + исходники. Допилить под свои нужды проблем не составит.
172. vitek1 16.07.19 15:11 Сейчас в теме
Пробую использовать компоненту. Все сделал по примеру. Из исходников компоненты сканирования:
private void sendScanResult(byte[] data){
Intent intent = new Intent();
intent.putExtra("data", data);
intent.setAction("com.rfid.SCAN");
sendBroadcast(intent);
}
определил ServiceSCAN_MESSAGE = "com.rfid.SCAN" и ServiceBarCodeField = "data". Но ОбработкаОповещения не срабатывает. Пробовал другую разработку на основе этой же компоненты перехвата Broadcast, тоже не получилось. Сообщения со (104) и ниже по этой проблеме в ветке
https://forum.infostart.ru/forum28/topic181881/
Подскажите, в чем может быть проблема?
173. vitek1 16.07.19 15:12 Сейчас в теме
Пробую использовать компоненту. Все сделал по примеру. Из исходников компоненты сканирования:
private void sendScanResult(byte[] data){
Intent intent = new Intent();
intent.putExtra("data", data);
intent.setAction("com.rfid.SCAN");
sendBroadcast(intent);
}
определил ServiceSCAN_MESSAGE = "com.rfid.SCAN" и ServiceBarCodeField = "data". Но ОбработкаОповещения не срабатывает. Пробовал другую разработку на основе этой же компоненты перехвата Broadcast, тоже не получилось. Сообщения со (104) и ниже по этой проблеме в ветке
https://forum.infostart.ru/forum28/topic181881/
Мобильная платформа 8.3.10
Подскажите, в чем может быть проблема?
174. vitek1 16.07.19 15:19 Сейчас в теме
Судя по исходникам поле именно "data". Если указываю другое имя поля, то при сканировании компонента "падает" с ошибкой "В работе приложения BC2OneCBT произошел сбой. Закрыть приложение". Если имя поля "data", то компонента не падает и выдает сообщение "Get valid intent data:".
Из написанного делаю вывод, что имя поля правильное. Может подскажете как можно точно убедиться в названии. Пробовал LogCat. При сканировании ничего полезного не увидел, хотя в логах сообщения от пакета com.rfid.hwsoftscan (это ПО настройки сканера) были. Что не так?

Пробую использовать компоненту. Все сделал по примеру. Из исходников компоненты сканирования:
private void sendScanResult(byte[] data){
Intent intent = new Intent();
intent.putExtra("data", data);
intent.setAction("com.rfid.SCAN");
sendBroadcast(intent);
}
определил ServiceSCAN_MESSAGE = "com.rfid.SCAN" и ServiceBarCodeField = "data". Но ОбработкаОповещения не срабатывает. Пробовал другую разработку на основе этой же компоненты перехвата Broadcast, тоже не получилось. Сообщения со (104) и ниже по этой проблеме в ветке
"Конфигурация-основа для мобильного приложения - сканер штрихкода (фото сканер и ТСД) + фото" (ссылку не привожу, а то сообщение не пропускается)
Мобильная платформа 8.3.10
Подскажите, в чем может быть проблема?
105. g160878 10.07.18 23:50 Сейчас в теме
Для мобильного клиента подойдет? Будет работать?
106. DMon 120 11.07.18 07:55 Сейчас в теме
(105) Скорее всего что нет. Не проверял.
141. ared20 01.11.18 17:22 Сейчас в теме
(106) Не, не работает. Тоже очень интересует этот вопрос.
111. kolp821 13.07.18 18:07 Сейчас в теме
Обновил платформу до 8.3.12.67, приложение запускается, но оно не передает 1с ничего. Поставил версию 1.2.2. На платформа 8.3.9.91 все ок.
Чем это может быть связано?
114. kolp821 16.07.18 10:52 Сейчас в теме
(111)
Добавлю, что в версии 8.3.12.64 все работает. Наверное это трабл от компании 1с, или они что то новое ввели и тепер Ваш сервис не работает. Обратите на это внимание.
112. treedo 124 14.07.18 18:11 Сейчас в теме
При запуске приложения компонента запускается, при завершении - останавливается. Но если 1с приложение завершили просто убрав из списка запущенных программ - то не срабатывает событие "ПриЗавершенииРаботыСистемы" и когда приложение запускают еще рас - компонента вновь стартует. Это не повлечет за собой каких-то сбоев?
113. DMon 120 14.07.18 21:53 Сейчас в теме
(112) не должно. Оно независимо от 1С. И если один экземпляр запущен - повторно не запускается
115. evgeny43 32 31.07.18 08:53 Сейчас в теме
(113) Пишу для уважаемого DMon, а также для всех кому эта информация будет полезна.
на 8.3.12 + скорее всего драйвер работать не будет .
А причина в следующем :
Формат обработки сообщения push уведомлений изменен согласно последним требованиям google .
Теперь 1с принимает внешние сообщения только по протоколу GCM от google .


Манифест андроида отвечающий за эту часть :
БЫЛО


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


-<intent-filter>

<action android:name="com.google.android.c2dm.intent.RECEIVE"/>

<category android:name="com.e1c.mobile"/>

</intent-filter>

</receiver>

СТАЛО




-<receiver android:name="com.google.android.gms.gcm.GcmReceiver" android:permission="com.google.android.c2dm.permission.SEND" android:exported="true">


-<intent-filter>

<action android:name="com.google.android.c2dm.intent.RECEIVE"/>

<category android:name="${applicationId}"/>

</intent-filter>

</receiver>


-<service android:name="com.e1c.mobile.PushNotificationService" android:exported="false">


-<intent-filter>

<action android:name="com.google.android.c2dm.intent.RECEIVE"/>

</intent-filter>

</service>

<provider android:name="com.e1c.mobile.SoundAssetProvider" android:exported="true" android:enabled="true" android:authorities="${applicationId}.soundasset"/>


____________________________________________________________­_______________

Из того что я успел разобрать - получается следующее ( прошу поправить если не прав , информация взята на основе данных о новом формате уведомлений и частично разобранном апк платформы)
Для отправки push уведомлений теперь необходимо google play и google story т.к используется их библиотека и api для кодирования сообщения и отправки через облачное хранилище 1с-ке (другими словами требуется интернет). Возможно отправку через интернет удастся обойти (тут я просто чего то не понимаю, но возможно библиотека google все же для приложений установленных на 1 устройстве не отправляет все в облачное хранилище, а оповещает сразу). Потом требуется регистрировать приложение в google api и получать для него уникальный ключ, но я надеюсь и это удастся обойти , взяв за основу оригинальный ключ и придумав свой . К сожалению до кода ресивера apk я так и не смог добраться, как следвие нехватки опыта работы на андроиде , возможно туда можно подсунуть в нужном формате intent игнорирую шифроку библиотеками google , если у кого получится , поделитесь пожалуйста , но у меня есть подозрение , что там все так же как и в типовом примере google- происходит просто отправка сообщения в класс библиотеки google с его дальнейшей дешифровкой.



Если я где то ошибся, буду рад быть просвещенным)
116. DMon 120 31.07.18 10:46 Сейчас в теме
(115) Большое спасибо за полезную информацию! У нас переход на 12+ релиз только в планах. Как только станет вопрос остро - буду смотреть/тестировать что куда. Но пока всё в состоянии "работает - и не трогай" ))
117. evgeny43 32 31.07.18 12:22 Сейчас в теме
(116) не за что, я попробовал по быстрому разобраться, раз не получилось, так же отложил , на момент острой необходимости в 12 платформе)
P.S 8.3.9 платформа (хороший wifi - редко - плохая связь - часто) валится при связи с сервером (точно узнать не смог, но скорее всего недополучив пакет в конце , вместо того что бы вызвать исключение и продолжить работу падает , либо отправляет не до конца собраный xml файл в диссериализатор и там падает))_) -- 8.3.10.84 пока полет нормальный.
135. menen 25.10.18 04:15 Сейчас в теме
(116) Добрый день!

Переход на 8.3.12+ еще не делаете? Хорошая компонента. Работаем уже полгода. Из-за некоторых глюков релиза 8.3.11 перешли на 8.3.12, а тут такие новости ...
138. DMon 120 25.10.18 09:22 Сейчас в теме
(135) Пока нет. В приоритете другие задачи, а эта по принципу "работает? - и не трогай!". Сидим пока на 8.3.10
142. ared20 01.11.18 19:15 Сейчас в теме
(115) тут передача идет не через push-сообщения, а локальные. Интернет для этого не нужен. В исходниках нет работы с push-сообщениями. Не должно это повлиять на работу. Но у меня не работает на 12-ой платформе. Копаю исходники, но знаний по Андроиду маловато. У меня ТСД Моторола MC40.
143. evgeny43 32 02.11.18 09:36 Сейчас в теме
(142) Я с вами согласен, интернет скорее всего не нужен , нужно понять в какой структуре должно приходить сообщение по этому протоколу и что такое ${applicationId} , вернее как его задать, из чтива гугл протокола , я так понял оно дается приложению после регистрации его в гугл. Мое предположение :
Надо 1 раз сделать все по инструкции, что бы отловить структуру получения данных.
Зарегистрировать приложение в гугл и попробовать в него , что то передать через этот протокол по инструкции, написав при этом свой ресивер , который бы ловил сообщения так же как и 1с ка , и отловить полученные сообщения параллельно 1с ке , а ${applicationId} в нашем приложении можно будет вбить гвоздями , после регистрации 1с ки в гугле .
Отловив структуру данных в андроид студии отладчиком , мы сможем подсовывать фальшивку нашей 1с ке , так что бы она думала , что это сообщение от приложения гугл и пропускала их .

P.S. Надеюсь сообщение не шифруется ключом ${applicationId} - тогда это геморой , либо придется посылать все сообщения через библиотеку гугл по этому протоколу, зная ${applicationId} (((, что тоже добавляет не мало кода в реализацию и скорее всего придется добавлять пользовательский интерфейс ( .
155. Liily 07.12.18 11:11 Сейчас в теме
(113) Спасибо за драйвер! Качала с https://infostart.ru/public/704582/ разработки, допиленный для DISC DS9.
В целом все работает, но иногда начинает на одно сканирование выдавать 2 сообщения. Перезагрузка ТСД помогает, но потом опять через какое-то время идут двойные сообщения. С чем это может быть связано? Точно второй экземпляр не запускается если уже есть один активный (работу 1С завершили некорректно)?
124. nikatysel 26.09.18 12:45 Сейчас в теме
Здравствуйте!
ТСД iot portable data terminal, андроид 4.4.2, версия мобильной платформы 1с 8.3.12.67.
Сканирует только в своё приложение ScanData, декомпилировала его - пробовала разные имена интентов, в том числе и те, что тут упоминались, и те, что в манифесте есть, но в обработку оповещения не попадаю. Ваш сервис точно установлен и точно стартует, база одна в списке, необходимый код в моб. конфу 1с добавлен.
В логкате не вижу публичных интентов, которые по идее должны кидаться при сканировании. И на самом устройстве нет стандартных настроек, которые обычно есть у тсд на андроиде - тех настроек сканирования, в которых можно включить режим эмуляции ввода с клавиатуры (который решил бы все проблемы в данной ситуации, мне бы даже не пришлось работать с вашей утилитой) и т.д. С ним идет только книжка со штрихкодами, которые надо сканить в эту ScanData, таким образом его якобы можно запрограммировать, но тут нет тех настроек, которые мне нужны (и уж тем более нет настройки отправлять считанный штрихкод интентом).

Вот манифест ScanData:

<?xml version="1.0" encoding="ISO-8859-1"?>
<manifest package="com.wenpy.scandata" android:versionName="1.0" android:versionCode="1" android:sharedUserId="android.system.uid" xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:targetSdkVersion="9" android:minSdkVersion="9"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INJECT_EVENTS"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application android:allowBackup="true" android:icon="@drawable/scan" android:label="@string/app_name" android:theme="@style/AppTheme">
<activity android:name="com.wenpy.scandata.MainMenu" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<receiver android:name="BootBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="android.intent.category.HOME"/>
</intent-filter>
</receiver>
<activity android:name="BootStartDemo"/>
</application>
</manifest>
Показать


У меня закончились идеи, как ещё я могу получить отсканированный штрихкод себе в моб. приложение. Помогите, пожалуйста!
125. nikatysel 26.09.18 13:01 Сейчас в теме
Не увидела, что есть ещё вторая страничка обсуждения, где как раз говорится про 8.3.12! Пробую собрать всё под ниже релиз.
126. nikatysel 26.09.18 15:10 Сейчас в теме
Не получилось на версиях: 8.3.12.67, 6.3.11.61, 8.3.10.84, 8.3.10.51 (тут писали выше, что на ней ещё работало). Подскажите, есть ли смысл дальше понижать?
Может ли быть такое, что ScanData ловит сканирование не интентом, и если да, то каким образом? И значит ли это, что я никак не могу отловить в 1С сканирование?
ТСД не имеет в настройках ни режима эмуляции клавиатуры, ни настроек отправки интентов, с ним идет только бесполезная книжка со штрихкодами, с помощью которых можно длину задержки и префикс задать.
http://www.bilkur.com/download/Sunlux/dokuman/Sunlux_XL-868_User_Manual.pdf
129. DMon 120 02.10.18 15:54 Сейчас в теме
(126) Как ни странно, но под собранные в апк приложения, как-то непредсказуемо работает компонента. Лучший результат, когда установить отдельно мобильную платформу и добавить туда конфигурацию (загрузить по сети)
127. avtoduk 02.10.18 12:07 Сейчас в теме
Добрый день, у меня ТСД Атол SMART Droid,
установил BarCodeComponent_ver_1_2_2.apk, в конфе 1с провисал все как показано выше, не включается сканер, по нажатию кнопки "SCAN".
что делать????
128. DMon 120 02.10.18 15:49 Сейчас в теме
(127) искать проблему на своей стороне. К компоненте SCAN отношения не имеет
130. avtoduk 02.10.18 17:04 Сейчас в теме
(128) хорошо, если я включаю приложение ScanDemo (сканер включается) и сворачиваю его, тогда при нажатии кнопки "scan', появляется оповещение 1С о сканировании.... КАК заставить BarCodeComponent_ver_1_2_2.apk включать сканер в режим сканирования....?
131. DMon 120 02.10.18 20:26 Сейчас в теме
(130) никак. Она для этого не предназначена. "Слушает" бродкаст и переправляет в 1С. Всё. Никаких настроек. Если бродкаста нет от сканера - соответсвенно нечего пересылать.
132. avtoduk 03.10.18 04:42 Сейчас в теме
Народ, кто-то писал что на Атоле Смарт Дроиде все заработало, отзовитесь. В разрез клавиатуры у меня работает если включить "Scan Wedge", но надо как событие.
133. avtoduk 03.10.18 07:03 Сейчас в теме
У меня заработало Атол Smart Droid модель LPT82. Вдруг кому надо:
1. установил BarCodeComponent_ver_1_2_2.apk
2. Изменил настройки в приложении ScanWedge (Scan Wedge - true, Send barcode data - Clipboard)
3.
НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","DATA_SCAN"); 
     НовЗП.ДополнительныеДанные.Добавить("ServiceBarCodeField","DATA_STRING");
134. user1041486 12.10.18 08:40 Сейчас в теме
Здравствуйте! Помогите настроить EDA50K. Может я какие параметры не те передаю.
НовЗП.Действие = "com.HoneywellScan.action";
	    НовЗП.ДополнительныеДанные.Добавить("ServiceState","Start"); //что сделать: Старт/Стоп
	    НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","scan.rcv.message"); //чей бродкаст ловить
            НовЗП.ДополнительныеДанные.Добавить("ServiceBarCodeField","dataBytes"); //в каком поле сканер возвращает штрих-код 
	    НовЗП.ДополнительныеДанные.Добавить("ServiceEventID","1"); //категория сообщение для 1С
	    НовЗП.ДополнительныеДанные.Добавить("ServiceToast","Service STARTED!");//(не обязательно) просто покажет Тост при успехе
	    НовЗП.ДополнительныеДанные.Добавить("ServiceBase_Name","");//если одна база - можно поставить ""

APK - файл брали из 76 сообщения в данной теме. в настройках сканера нужные галки проставили, Action прописали. При запуске 1с открывается "BarcodeAndroid". а результат возвращается 0.
136. termo 25.10.18 09:09 Сейчас в теме
Сервис перехвата перестает работать через некоторое время. Причем иногда через 5 минут, иногда через 2 часа после запуска 1С. То есть в процессе работы бац и перестает сканироваться товар в 1С (сам сканер в свои утилиты все равно сканирует). Приходится перезапускать 1С чтобы перезапустился сервис. После перезапуска 1С (соответственно и сервиса) снова все начинает работать, но через какое-то время история повторяется. Смотрел - памяти свободной достаточно. В Лимите фоновых процессов стоит по умолчанию "Стандартное ограничение" и если отправить в фон какое-то другое приложение, то оно само не закрывается. ТСД Urovo i6200A. Мобильное приложение в режиме "для разработчика", 8.3.12.1469, Андроид 5.1.1.

Подскажите пожалуйста, как решить эту проблему ?
137. DMon 120 25.10.18 09:18 Сейчас в теме
(136) К сожалению, идеи по этому поводу не приходят. У нас 10+ постоянно работающих сканеров CARIBE (Android 5.1, платформа 8.3.10.51) уже почти 2 года и подобные ситуации не возникали. Без "больного устройства" на руках и отладчика угадать что не так практически не реально.
148. termo 20.11.18 08:40 Сейчас в теме
(137) Проблема эта возникает не только на одном конкретном ТСД, а на всех Urovo i6200A. Если я правильно понимаю, то Android на этом аппарате, по какой-то причине, просто завершает работу сервиса. Как появится возможность, попробую еще на других моделях и если будет результат - отпишусь. Спасибо.
149. DMon 120 20.11.18 10:23 Сейчас в теме
(148) Посмотрите, нет ли случайно какого-то "таск киллера" (может системного). Может где-то есть настройки очищалок памяти.
139. s.kochnev 30.10.18 13:48 Сейчас в теме
Добрый день

Acode tools не работает, нужно завести сканер CS3070 с потребительским смартфоном на Android 6.0. Сам я в этой теме не очень, действую методом тыка :) Чтобы сделать броадкаст, взял https://github.com/darryncampbell/GenericScanWedge Оно нормально подключает сканер, но ваше приложение ничего не ловит(?). Пробовал в GenericScanWedge прописать action "com.hht.emdk.datawedge.data_string" и использование sendBroadcast(), и "scan.rcv.message" (как прописано в конфигурации) - ничего не происходит. В logcat ни при каких обстоятельствах ничего не выводится при сканировании. Куда копать?
140. s.kochnev 31.10.18 08:33 Сейчас в теме
(139) Вопрос снят, решили не мучиться со смартфонами.
150. treedo 124 20.11.18 17:46 Сейчас в теме
У нас на базе 8.3.10.51 в приложении возникают ошибки БД, а в версии 8.3.13.45 они поправлены, да и вообще очень печально что с новыми версиями платформы этот сервис не работает. Пожалуйста, может Вы сможете адаптировать сервис под новую мобильную платформу?
151. DMon 120 20.11.18 17:48 Сейчас в теме
(150) Позже. Сейчас нет необходимости и времени этим заниматься.
153. KBNIKKB 26.11.18 15:37 Сейчас в теме
Подскажите пожалуйста по настройкам ТСД , все ли делаю так ?
Прикрепленные файлы:
154. bavkyz 3 27.11.18 09:14 Сейчас в теме
Может кому пригодится: АТОЛ SMART DROID LITE (новый аппарат в декабре 2018 будет в продаже, Android 7.0, 2D Image)
НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","com.xcheng.scanner.action.BARCODE_DECODING_BROADCAST"); 
НовЗП.ДополнительныеДанные.Добавить("ServiceBarCodeField","EXTRA_BARCODE_DECODING_DATA");
perpleks; Flok; DMon; +3 Ответить
156. kolp821 26.12.18 15:07 Сейчас в теме
На руках есть ноунейм ТСД, на нем установлено приложение для сканирования. Как можно узнать ServiceSCAN_MESSAGE?
157. DMon 120 26.12.18 15:11 Сейчас в теме
(156) Можно в отладчике андроид студии, но проще всего найти сервисное приложение, которое идет вместе с устройством для настройки сканера, вытащить сам apk и разобрать его. По разобранным текстам искать что-то связанное с Broadcast
158. user910311 22.01.19 08:27 Сейчас в теме
DMon, спасибо за сервис, купили, работает корректно.

Я сам раньше немного интересовался разработками приложений для android...так вот, не подскажите, как вы сделали, чтобы ваше приложение запускалось без видимого интерфейса?
159. DMon 120 22.01.19 08:33 Сейчас в теме
(158) если интерфейс не создавать и назначить приложению роль службы, то откуда же он появится?)
160. user910311 22.01.19 12:38 Сейчас в теме
Других вариантов, кроме как: открыть приложение, запустить из него службу (сервис) , и сразу же закрыть его (приложение), больше не могу придумать )) вы как-то по другому делали? )
161. KostyaBu 20 23.01.19 16:43 Сейчас в теме
В общем работает но задам пару вопросов
1. Подскажите пожалуйста возможно ли запустить эту компоненту на мобильном клиенте 1с?
2. Почему работает именно на 8.3.11 и не пашет на 8.3.13
162. DMon 120 23.01.19 16:45 Сейчас в теме
(161)
1) нет
2) технология "рассылки сообщений" другая
163. BROM18 29.01.19 18:40 Сейчас в теме
Платформа 8.3.12.93 работает все ок. Переработал по этой схеме https://infostart.ru/public/779912/
164. Vortigaunt 96 29.01.19 21:34 Сейчас в теме
Всем, кто ждет решение для платформы 8.3.12 могу посоветовать вот это решение:
https://infostart.ru/public/779912/
Мы успешно интегрировали его для работы со сканером штрихкодов в ТСД. Работает на платформе 8.3.12.93
193. alexinnnn 15.03.20 21:55 Сейчас в теме
(164)
https://infostart.ru/public/779912/
У нас этот вариант не удалось интегрировать (( ошибка "Компонента не подключена" 8.3.16
165. termo 08.02.19 13:53 Сейчас в теме
Пытаюсь прикрутить к мобильному клиенту. Смотрю в манифесте - вроде "интент-фильтры" для мобильной платформы и для мобильного клиента одинаковые:
...
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
...

При этом "Мобильное приложение" ловит broadcast, а "Мобильный клиент" не реагирует. Все "лишнее" удалял - не помогает.

Подскажите пожалуйста, как добиться того, чтобы "sendBroadcast(IntentFor1C);" отрабатывал и для мобильного клиента ?
Evgeniy_gnedov; +1 Ответить
167. Evgeniy_gnedov 22.05.19 13:30 Сейчас в теме
(165) Аналогичная проблема. Мобильный клиент никак не взлетает.
На партнерском форуме 1С хранит молчание, материалов ноль.

Если что-то получится, маякните, пожалуйста.
166. sleemp 26 19.04.19 13:44 Сейчас в теме
Добрый день!

А под 8.3.13 не взлетает?

UPD: Пардон, перечитал тему, ушел по ссылкам изучать информацию.
168. пользователь 08.06.19 20:24
Сообщение было скрыто модератором.
...
169. DMon 120 08.06.19 22:46 Сейчас в теме
(168) Какое-то не понятное и странное выклянчивание. На форуме 10 лет. (на самом деле тут много чего написал, но потом стер...)
Вот тебе 2 стармани, скачай
baracuda; zergey128; +2 Ответить
170. zergey128 8 09.06.19 12:44 Сейчас в теме
(169) Все заработало! спасибо огромное!
171. vitek1 14.07.19 19:26 Сейчас в теме
Прошу помощи. Не могу настроить перехват. Пробую на планшете RUGLINE RT711 со встроенным сканером 1D Symbol SE955. По исходникам встроенной компоненты управления сканером определил интент action: com.rfid.SCAN, поле: data, тип данных: byte
Часть кода исходников
private void sendScanResult(byte[] data){
Intent intent = new Intent();
intent.putExtra("data", data);
intent.setAction("com.rfid.SCAN");
sendBroadcast(intent);
}
Исходники компоненты
https://github.com/xuanyuanpang/hwsoftscan

Создал конфигурацию по примеру. Инициализация компоненты проходит успешно. Но штрихкод получить не могу, событие ОбработкаОповещения в отладчике не срабатывает. Пробовал разные версии компоненты BC2OneC. Скачал уже несколько разработок. Все-равно не получается. Мобильная платформа 8.3.10.84. Что делаю не так?
175. WellMaster 104 03.09.19 14:16 Сейчас в теме
Уважаемый автор!

Нет ли возможности доработать сервис, чтобы он, перехватывая сообщение broadcast не только передавал событие в 1с, а еще и устанавливал перехваченное сообщение в буфер обмена и при этом эмулировал бы нажатие клавиши "v"?
Очень надо. Могу объяснить для чего.

Спасибо.
176. DMon 120 03.09.19 14:20 Сейчас в теме
(175) У меня сейчас не столько много времени для экспериментов, чтоб заниматься реализацией подобного функционала, который в будущем вряд-ли пригодится компании. Уверен, покурив немного гугл, Вы сможете такое сделать самостоятельно
177. WellMaster 104 03.09.19 16:51 Сейчас в теме
178. Azamatex 12 08.10.19 13:18 Сейчас в теме
Добрый день. Для работы на АТОЛ Smart.Touch в поле "ServiceSCAN_MESSAGE" прописываем "DATA_SCAN".
179. bavkyz 3 09.10.19 04:50 Сейчас в теме
(178) попробуй через буфер перехват сделать, у меня на Атол смарт дроиде (версия андроида 4.4) не получалось поймать событие, так через буфер сделал и все довольны)
180. digitta 16.10.19 17:20 Сейчас в теме
Добрый день. Прочитал форум, но так не понял, будет ли компонента работать на устройстве Honeywell EDA50k, Android 7.1.1. Кто-нибудь запускал уже? Очень надо знать, т.к. только ради покупки компоненты буду покупать подписку на Инфостарт.
181. bavkyz 3 17.10.19 04:41 Сейчас в теме
(180) компонента ловит события, если в настройках сканера есть броадкаст_евент, то все будет работать.
182. Nrk 9 04.12.19 10:32 Сейчас в теме
(180)Добрый день, удалось что-то сделать с данным ТСД? просто у нас такой же, не знаю как победить))
183. DMon 120 04.12.19 10:39 Сейчас в теме
(182) Так опишите подробнее с чем "сражаетесь". Или "что-то сделать" может любой, но не каждый? ))
nikatysel; +1 Ответить
184. Nrk 9 04.12.19 10:45 Сейчас в теме
С тем же с чем и все остальные в этой теме)) Я так понял на новых платформах этот способ не работает? Пока реализовал считыванием в поле ввода, но это не совсем удобно.
185. DMon 120 04.12.19 10:53 Сейчас в теме
(184) на новых не работает данный вариант компоненты. Именно потому что "считывание из поля не удобно" - то была изобретена эта компонента года 3-4 назад. С тех пор парк ТСД не обновлялся, ПО не развивалось (всем всего хватает). Ближайшее время развитие не планируется.
188. Mahon83 13 27.01.20 09:25 Сейчас в теме
Добрый день ! В поисках решения своей проблемы наткнулся на вашу статью. У меня задача схожая, но считывать необходимо RFID метки с помощью планшета "ISBC-RFID Tablet PC", можно ли используя данную компоненту из 1С считать метки?
189. DMon 120 27.01.20 09:32 Сейчас в теме
(188) На практике не пробовал. Но теоретически формально метка мало чем отличается от баркода. Если устройство умеет в определенный бродкаст слать уведомление, то почему бы их не ловить в 1С. Только платформа не выше 8.3.11
190. Mahon83 13 27.01.20 09:36 Сейчас в теме
(189) а как определить, умеет ли устройство слать уведомление в бродкаст? и в какой именно? Просто ранее опыта разработки мобильных приложений не было.
191. KAV2 156 11.03.20 11:06 Сейчас в теме
Может есть идеи как такое сделать для платформы выше 8.3.11?
192. DMon 120 12.03.20 00:01 Сейчас в теме
(191) пост 164. Всё заработало на 8.3.15
194. user852102 31.05.20 12:41 Сейчас в теме
Добры день!
Помогите пожалйста найти "ServiceSCAN_MESSAGE" и "ServiceBarCodeField"

Это смог нарыть в родной apk ТСД


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="12" android:versionName="2.1" package="com.example.scanner" 

platformBuildVersionCode="24" platformBuildVersionName="7">
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <application android:theme="*style/AppTheme" android:label="*string/app_name" android:icon="*drawable/ic_launcher" android:allowBackup="true">
        <activity android:theme="*style/Theme.NoTitleBar" android:label="*string/app_name" android:name="com.example.scanner.MainActivity" 

android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:theme="*style/codebar_theme" android:name="com.example.scanner.ConfigurationSettingsActivity" 

android:screenOrientation="portrait"/>
        <receiver android:name="com.example.scanner.ScanReceiver">
            <intent-filter>
                <action android:name="com.lecom.scan.service.startup"/>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <action android:name="android.intent.action.SCREEN_ON"/>
                <action android:name="android.intent.action.SCREEN_OFF"/>
                <category android:name="android.intent.category.HOME"/>
            </intent-filter>
        </receiver>
        <service android:name="com.example.scanner.ScanService">
            <intent-filter>
                <action android:name="com.lecom.scan.service.bringup"/>
                <category android:name="android.intent.category.HOME"/>
            </intent-filter>
        </service>
    </application>
</manifest>
Показать
195. user852102 01.06.20 10:04 Сейчас в теме
(194)

также нашел в мануале от сканера эту инфу


// broadcast mode under registration required scan.rcv.message broadcast
IntentFilter filter = new IntentFilter (); filter.addAction ( SCAN_ACTION
);
registerReceiver ( mScanReceiver , filter);
Broadcast Example:
private BroadcastReceiver mScanReceiver = new BroadcastReceiver () {
*Override
public void onReceive (Context context, Intent intent) {
byte [] broadCode = intent.getByteArrayExtra ( " barocode " );
int broadCodeLen = intent.getIntExtra ( " length " , 0 );
byte temp = intent.getByteExtra ( " barcodeType " , ( byte ) 0 );
byte [] aimid = intent.getByteArrayExtra ( " aimid " );
// broadCodeStr = new String (broadCode, 0, broadCodeLen);
broadCodeStr = new String (broadCode);
if ( broadCodeStr ! = ' " && broadCode! = null ) {
SoundPoolUtils. play ( 2 ); StringBuilder sb = new StringBuilder
(); sb.append ( broadCodeStr );
try {
String utf8 = new String (
sb.toString (). getBytes ( " UTF-8 " ));
String utf16 = new String (
sb.toString (). getBytes (), " UTF-16 " );
String gbk = new String (
sb.toString (). getBytes ( " GBK " ));
showScanResult . append (utf8);} catch ( UnsupportedEncodingException
e) {
e.printStackTrace ();
}
showScanResult . append ( " \ n " );
showScanResult . setTextColor (Color. argb ( 255 ,
random . nextInt ( 256 ),
random . nextInt ( 256 ),
random . nextInt ( 256 )));
} else {
SoundPoolUtils. play ( 2 );
}
sm . stopScan ();
}};
Broadcast reception parameters
byte [] broadCode = intent.getByteArrayExtra ( " barocode " ); // Barcode data
int broadCodeLen = intent.getIntExtra ( " length " , 0 ); // Data length
byte temp = intent.getByteExtra ( " barcodeType " , ( byte ) 0 ); // Types of
byte [] aimid = intent.getByteArrayExtra ( " aimid " ); // id
Показать


что же мне указать в параметрах
196. DMon 120 01.06.20 11:02 Сейчас в теме
(195)
Не совсем уверен, но думаю что
НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","scan.rcv.message"); 
НовЗП.ДополнительныеДанные.Добавить("ServiceBarCodeField","barocode"); 
user852102; +1 Ответить
197. user852102 01.06.20 11:16 Сейчас в теме
(196)
Спасибо, попробую!
Это получается как изначально в публикации . . .
198. user852102 02.06.20 16:58 Сейчас в теме
(196)
Так и сделал, взлетело, но загвоздка была еще в том что Пришлось версию ниже ставить, с 8,3,13 на 8,3,10. Спасибо!
199. Oliver 28.10.20 12:13 Сейчас в теме
Здравствуйте! У меня не получилось подружить компоненту с ТСД Атол Smart Pro. Нет вызова
Процедура ОбработчикЛокальныхУведомлений(Уведомление,Локальное,Показано, ЧтоТоЕще) Экспорт

В переменную результат возвращается 77.
Я не уверен в парамерах. Взял из формума, для ТСД Атол Атол Smart Droid
НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","DATA_SCAN");
НовЗП.ДополнительныеДанные.Добавить("ServiceBarCodeField","data_string")
отловить эти параметры с помощью logcat - не получилось.

НовЗП = Новый ЗапускПриложенияМобильногоУстройства();
НовЗП.Действие = "com.barcodeto1c.action";				
НовЗП.ДополнительныеДанные.Добавить("ServiceState","Start"); //что сделать: Старт/Стоп		
//НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","scan.rcv.message"); //чей бродкаст ловить
НовЗП.ДополнительныеДанные.Добавить("ServiceSCAN_MESSAGE","DATA_SCAN");		
//НовЗП.ДополнительныеДанные.Добавить("ServiceBarCodeField","barocode"); //в каком поле сканер возвращает штрих-код (если не задавать - по умолчанию barocode, что в большинстве случаев оно так)
НовЗП.ДополнительныеДанные.Добавить("ServiceBarCodeField","data_string");		
НовЗП.ДополнительныеДанные.Добавить("ServiceEventID","1"); //категория сообщение для 1С
НовЗП.ДополнительныеДанные.Добавить("ServiceToast","Service STARTED!");//(не обязательно) просто покажет Тост при успехе
НовЗП.ДополнительныеДанные.Добавить("ServiceBase_Name","");//если одна база - можно поставить ""
Результат = НовЗП.Запустить(Истина);
Показать

Может ли кто подсказать в чём причина?
Оставьте свое сообщение