0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209

ТСД MINDEO сканирование

14.02.2023, 09:01. Показов 10768. Ответов 52

Студворк — интернет-сервис помощи студентам
Добрый день!
Мне необходимо написать небольшую программу, которая работает с ТСД.
что имеем:
Есть терминал сбора данных (ТСД) Mindeo ака Hyatta на андроиде 11.
т.к. разработка под Андроид это не мой профиль, да и задание единичное,
то сильно погружаться в эту тему не хотелось бы.
год назад т.ж. пришлось писать для ТСД, но только Honeywel, там все проще,
был SDK и мне осталось только портировать его под себя.
Сейчас пошел по такому же пути но нашел SDK только под winForms, и она работает через Com-порт.

На данном этапе программа не видит устройство (сканер), соответственно данные не приходят.
Посоветуйте как это реализовать.
В идеале хотелось бы что-то универсальное, чтобы не зависеть от производителя устройства.

Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.02.2023, 09:01
Ответы с готовыми решениями:

Сканирование штрих кодов на ТСД
ТСД М3 Orange, платформа 8.3.9, открываю окно ПоказатьВводСтроки, ввожу строку сканированием штрих кода. Строка заполняется, после...

ТСД - MT2090-SLO получение данных с ТСД без использования 1С
Доброго времени суток форумчане! Подскажите пожалуйста, необходимо организовать получение данных с ТСД без использования 1С. Данные мне...

1С:Предприятие 8.3 (8.3.5.1119) + сканер mindeo md 2250+ (не работает поиск)
Всем доброго дня. Неделю читаю форумы. Решил задать вопрос. Установлено 1С Предприятие 8.3 (8.3.5.1119). Подключен сканер mindeo md...

52
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
07.03.2023, 14:35  [ТС]
Студворк — интернет-сервис помощи студентам
да, вы оказались правы, программа BCScan и в ней я включил в настройках broadcast mode.
код такой взял по вашей ссылке, я
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class MainActivity :AppCompatActivity {
  private static string _scanActionName = "com.seuic.bluetooth";
  BroadcastReceiverTest receiver; 
 
  protected override void OnCreate(Bundle savedInstanceState) {
     base.OnCreate(savedInstanceState);
      receiver = new BroadcastReceiverTest(); 
      _scanActionName = "com.hyatta.hdms.scanner.ScanManager";/*прописал свой сканер*/
  }
 
  public class BroadcastReceiverTest: BroadcastReceiver {        
        public override void OnReceive(Context context, Intent intent) {
            var code = intent.GetStringExtra("scannerdata");
            Console.WriteLine(code);
            TestScanningTransmitter.TransmitScanData(code);
        }
    }
    public static class TestScanningTransmitter {
        public delegate void ScanHandler(string scanData);
 
        public static event ScanHandler Notify;
        public static void TransmitScanData(string scanData) {
            Notify?.Invoke(scanData);
        } 
    }
 
        protected override void OnResume() {
            base.OnResume();
            RegisterReceiver(receiver, new IntentFilter(_scanActionName)); 
        }
 
        protected override void OnPause() {
            UnregisterReceiver(receiver); 
            base.OnPause();
        }
}
по идее тут д.б. данные var code = intent.GetStringExtra("scannerdata");
но событие не срабатывает, и сюда не попадает
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
07.03.2023, 14:41
sonmax, а вы название события посмотрели в этой программе ? У меня то оно другое

Добавлено через 2 минуты
Попробуй полностью шаг за шагом повторить мой код

Добавлено через 29 секунд
Всего скорее вы не перекидываете в андройд
0
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
07.03.2023, 14:43  [ТС]
в дополнение к коду для понимания (может это и не нужно)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class MainActivity :AppCompatActivity {
 
    ScanManager mScanManager { get; set; }
    Com.Hyatta.Scanner.IDecodeCallback callback = null;
    Com.Hyatta.Hdms.Configuration.ScannerConstantParamKey ParamKey = null;
    private static string _scanActionName = "com.seuic.bluetooth";
    BroadcastReceiverTest receiver; 
 
 protected override void OnCreate(Bundle savedInstanceState) {
      base.OnCreate(savedInstanceState);
      // Xamarin.Essentials.Platform.Init(this, savedInstanceState);
      SetContentView(Resource.Layout.activity_main);
 
      Android.Support.V7.Widget.Toolbar toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
      SetSupportActionBar(toolbar);
 
 
      //Получаете доступ к устройству и работаете
      HDMSManager hdmsManager = HDMSManager.Instance;
      DeviceCommunicationManager mDeviceCommunicationManager = (DeviceCommunicationManager)hdmsManager.GetModuleManager(HDMSManager.MODULE_TYPE.Communication);
      DeviceApplicationManager mDeviceApplicationManager = (DeviceApplicationManager)hdmsManager.GetModuleManager(HDMSManager.MODULE_TYPE.Application);
      DeviceControlManager mDeviceControlManager = (DeviceControlManager)hdmsManager.GetModuleManager(HDMSManager.MODULE_TYPE.DeviceControl);
      DeviceRestrictionManager mDeviceRestrictionManager = (DeviceRestrictionManager)hdmsManager.GetModuleManager(HDMSManager.MODULE_TYPE.Restriction);
   
      string sn = mDeviceControlManager.DeviceSN;
      string pogo = mDeviceControlManager.ReadFromPogo();
 
      mScanManager = (ScanManager)hdmsManager.GetModuleManager(HDMSManager.MODULE_TYPE.Scanner);
      mScanManager.Open();
       receiver = new BroadcastReceiverTest(); 
      _scanActionName = "com.hyatta.hdms.scanner.ScanManager";
    }
}
вопрос, чтоб broadcast "заработал", receiver нужно же как то mScanManager "привязать"?
или я ошибаюсь?
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
07.03.2023, 15:06
По сути если физическая кнопка активирует сканер. То можете убрать из кода все что связанно с sdk

Добавлено через 38 секунд
Нужно только ловить событие как у меня по ссылке

Добавлено через 14 минут
C#
1
intent.GetStringExtra("scannerdata")
не забудьте тут указать название вашей переменной , они у всех разные вроде как. В том приложении должно быть написанно. У меня это "scannerdata"

Добавлено через 4 минуты
sonmax, что бы заработал нужно его зарегистрировать
C#
1
2
3
4
5
protected override void OnResume() 
{            
     base.OnResume();      
     RegisterReceiver(receiver, new IntentFilter(_scanActionName));         
}
1
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
07.03.2023, 15:09  [ТС]
Нужно только ловить событие как у меня по ссылке
в том то и проблема, что этого события вообще не "возникает"
C#
1
2
3
4
5
public override void OnReceive(Context context, Intent intent) {
            var code = intent.GetStringExtra("scannerdata");
            Console.WriteLine(code);
            TestScanningTransmitter.TransmitScanData(code);
        }
сюда никак не попадаю.

Для начала подпишемся на события из жизненного цикла и перекинем их в андройд (MauiProgram.cs)
вот с этим еще проблема. прошу не ругаться я плохо разбираюсь с xamarin и не понял куда это вписать.
MauiProgram.cs(mainprogram и т.д.) - файла вообще нет, есть только МаinActivity.cs

все остальное по коду я сделал.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
07.03.2023, 15:11
sonmax, Просто у вас не maui как я понимаю.
В регистрацию попадаете хотя бы ?
0
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
07.03.2023, 15:13  [ТС]
mainactivity.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
namespace App1 {
  [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)]
  public class MainActivity :AppCompatActivity {
    private static string _scanActionName = "com.seuic.bluetooth";
    BroadcastReceiverTest receiver;
 
    protected override void OnCreate(Bundle savedInstanceState) {
      base.OnCreate(savedInstanceState);
      receiver = new BroadcastReceiverTest();
      SetContentView(Resource.Layout.activity_main);
      TestScanningTransmitter.Notify += TestNotify;
    }
 
    protected override void OnResume() {
      base.OnResume();
      RegisterReceiver(receiver, new IntentFilter(_scanActionName));
    }
 
    protected override void OnPause() {
      UnregisterReceiver(receiver);
      base.OnPause();
    }
    private void TestNotify(string scanData) {
      string mess = scanData;
    }
 
    public class BroadcastReceiverTest :BroadcastReceiver {
      public override void OnReceive(Context context, Intent intent) {
        var code = intent.GetStringExtra("scannerdata");
        //Console.WriteLine(code);
        TestScanningTransmitter.TransmitScanData(code);
      }
    }
    public static class TestScanningTransmitter {
      public delegate void ScanHandler(string scanData);
      public static event ScanHandler Notify;
      public static void TransmitScanData(string scanData) {
        Notify?.Invoke(scanData);
      }
    }
  }
}
Добавлено через 50 секунд
OnCreate, resume, Pause - попадаю.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
07.03.2023, 15:18
Могу предложить такой вариант - напишите название события и переменной ваши, я соберу apk и проверим работает ли .
Потому что у вас там уже каша какая то получается

Добавлено через 1 минуту
sonmax, если работает то попробуем переделать то что у вас сейчас

Добавлено через 31 секунду
Или могу скинуть ссылку на гит и там сами попробуете
0
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
07.03.2023, 15:24  [ТС]
последний код - это пустое новое приложение,
и наверное переменные и события тут для меня не важны.
на счет каши -согласен, 100% понимания,
что за что отвечает у меня нет.
просто пробую разные варианты.
наверное вот это и есть самое главное
C#
1
2
3
4
5
6
7
8
#if ANDROID
                  events.AddAndroid(android => android
                      .OnActivityResult((activity, requestCode, resultCode, data) => LogEvent(nameof(AndroidLifecycle.OnActivityResult), requestCode.ToString()))
                      .OnStart((activity) => LogEvent(nameof(AndroidLifecycle.OnStart)))
                      .OnCreate((activity, bundle) => LogEvent(nameof(AndroidLifecycle.OnCreate)))
                      .OnBackPressed((activity) => LogEvent(nameof(AndroidLifecycle.OnBackPressed)) && false)
                      .OnStop((activity) => LogEvent(nameof(AndroidLifecycle.OnStop))));
#endif
понять бы куда вписать его.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
07.03.2023, 15:26
Если у вас не maui то это не нужно

Добавлено через 33 секунды
sonmax, дальше все сделали ?
0
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
07.03.2023, 15:27  [ТС]
давайте попробуем вначале git.
как то не удобно в "такой" день отвлекать вас.
если не получится, я после праздников отпишусь)))

Добавлено через 47 секунд
дальше все сделали ?
ну да, код mainactivity я выше кидал
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
07.03.2023, 15:31
Цитата Сообщение от sonmax Посмотреть сообщение
давайте попробуем вначале git.
как то не удобно в "такой" день отвлекать вас.
если не получится, я после праздников отпишусь)))
Щас отдельный проект создам тогда и скину ссылку,а то там слишком много лишнего уже с другими тестами
0
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
07.03.2023, 15:32  [ТС]
спасибо большое
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
07.03.2023, 16:08
Лучший ответ Сообщение было отмечено sonmax как решение

Решение

sonmax, Вроде бы ничего не забыл перенести
https://github.com/onimor/TSDTest
Только поменяйте наименование переменной, где будет результат, в "BroadcastReceiverTest.cs" на свое, у меня там "scannerdata"
и в MainActivity.cs _scanActionName укажите свое наименование. (наименования в том приложении с настройками можно посмотреть и то и то)
1
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
09.03.2023, 09:31  [ТС]
взял, ваш код, т.к. проект не открылся у меня.
по сути он такой же что вы раньше скидывали.
изменил на свои переменные.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private static string 
  _scanActionName = "com.android.scanner.broadcast";
  BroadcastReceiverTest receiver = new BroadcastReceiverTest();
 
  protected override void OnCreate(Bundle savedInstanceState) {
      TabLayoutResource = Resource.Layout.Tabbar;
      ToolbarResource = Resource.Layout.Toolbar;
 
      base.OnCreate(savedInstanceState);
      receiver = new BroadcastReceiverTest();
    }
    protected override void OnResume() {
      base.OnResume();
      RegisterReceiver(receiver, new IntentFilter(_scanActionName));
    }
 
    protected override void OnPause() {
      UnregisterReceiver(receiver);
      base.OnPause();
    }
    public class BroadcastReceiverTest :BroadcastReceiver {
      public override void OnReceive(Context context, Intent intent) {
        var code = intent.GetStringExtra("scandata");        // scandata_array
        TestScanningTransmitter.TransmitScanData(code);
      }
    }
    public static class TestScanningTransmitter {
      public delegate void ScanHandler(string scanData);
      public static event ScanHandler Notify;
      public static void TransmitScanData(string scanData) {
        Notify?.Invoke(scanData);
      }
    }
Проблема в том, что при сканировании программа не может попасть в OnReceive().
Есть подозрение, что проблема в ТСД. Режим broadcast не работает.
в BCScan есть 2 окна: TestScan-там есть галочка broadcast,
но ее состояние сбрасывается каждый раз при открытии окна.
второе - вроде как настройки, но там нигде нет включения этого режима.
в общем с терминалом какая то засада, написал в ТП Mindeo.
Жду что ответят.
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
09.03.2023, 09:45
зачем вы снова все свалили в 1 кучу
зачем это?
C#
1
BroadcastReceiverTest receiver = new BroadcastReceiverTest();
Вам нужно было просто скачать проект с гита и заменить там

C#
1
 _scanActionName = "тут ваше название";
и
C#
1
var code = intent.GetStringExtra("тут ваше название");
Цитата Сообщение от sonmax Посмотреть сообщение
что проблема в ТСД
Вы где брали это название "com.android.scanner.broadcast"?
Всего скорее оно не правильное , раз не ловится

Добавлено через 3 минуты
Цитата Сообщение от sonmax Посмотреть сообщение
TestScan-там есть галочка broadcast
Если оно с этой галочкой работает, то все должно работать и в вашем приложении, нужно только указать правильные названия
0
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
09.03.2023, 09:52  [ТС]
взял ваш код.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private static string _scanActionName = "com.seuic.bluetooth";
        BroadcastReceiverTest receiver;
 
        protected override void OnCreate(Bundle savedInstanceState) {
            base.OnCreate(savedInstanceState);
            receiver = new BroadcastReceiverTest();
        }
 
        protected override void OnResume() {
            base.OnResume();
            RegisterReceiver(receiver, new IntentFilter(_scanActionName));
        }
 
        protected override void OnPause() {
            UnregisterReceiver(receiver);
            base.OnPause();
        }
не стал добавлять отдельно файл BroadcastReceiverTest.cs
просто вставил код в основную.
"com.android.scanner.broadcast" и "scandata" - это из программы BCScan
ранее, когда пытался разобраться с API mindeo
смог получить название устройства - "com.hyatta.hdms.scanner.ScanManager " и пробовал без ("ScanManager")
но не то не другое не работает
0
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
09.03.2023, 09:55  [ТС]
в bcscan работает нормально и с галочкой и без
Миниатюры
ТСД MINDEO сканирование  
0
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
09.03.2023, 09:59
Цитата Сообщение от sonmax Посмотреть сообщение
"com.android.scanner.broadcast" и "scandata" - это из программы BCScan
И она работает с такими параметрами?

Добавлено через 46 секунд
аа, а кнопку скан вы жмете физическую или на экране?

Возможно проблема в том, что скан запускается программно через sdk в тестовой программе и придется делать так же, но вроде как оно у вас получилось уже

sonmax, попробуйте старым кодом с sdk , который работал, запускать сканирование, а ловить уже новым кодом
0
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209
09.03.2023, 10:01  [ТС]
да, все названия из bcscan.
она вообще работает без проблем и с физическими кнопками и с программной.
с broadcast и без. вот это меня и смущает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.03.2023, 10:01

ТСД CipherLab 8300
Здравствуйте. Win 7 x64 1С:Предприятие 8.3 (8.3.6.2299) Конфигурация: Управление производственным предприятием, редакция 1.1...

Связь 1С УТ 10.3 с ТСД Cleverence
Настроен Mobile Smarts, через обработку загрузки, в 1С УТ 10.3 всё выгружает без проблем, но если через кнопку встроенную в 1С...

ТСД и 1с (Комплексная автоматизация 1.1)
Подскажите, пожалуйста, знающие люди, какой ТСД выбрать? Я в этом не сильно разбираюсь, но нужно, чтобы из 1с 8.2 Комплексная автоматизация...

Утилита для ТСД
Доброго времени суток! Есть ТСД у который перестал считывать штрих код (слетела утилита, сброс к заводским не помогает). На сайте Атол...

ТСД (Windows CE) .net 3.5
Работал раньше с php и пришлось написать прогу для ТСД на visual studio 2008. Подскажите учебники для чайников для работы со сканером на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru