Форум программистов, компьютерный форум, киберфорум
C#: Xamarin/MAUI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
0 / 0 / 0
Регистрация: 05.07.2011
Сообщений: 209

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

14.02.2023, 09:01. Показов 10712. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru