Android штрих код bluetooth

How to read data from bluetooth barcode scanner Symbol CS3070 to Android Device

In my project i have to read barcodes using barcode scanner Symbol CS3070 through bluetooth. i.e; i have to establish a connection between android device and barcode scanner through bluetooth. Can any one tell me how to read values from barcode reader and how to setup for communication? I’ve already read the Bluetooth Developer Guide, and I don’t want to use Barcode Reader in Bluetooth Keyboard Emulation (HID) mode (I’ve some textview that can be filled using soft keyboard and Barcode Reader and I can’t control the focus) I’d use a thread like this to communicate with a reader

 private class BarcodeReaderThread extends Thread < private final BluetoothServerSocket mmServerSocket; public BarcodeReaderThread(UUID UUID_BLUETOOTH) < // Use a temporary object that is later assigned to mmServerSocket, // because mmServerSocket is final BluetoothServerSocket tmp = null; try < // MY_UUID is the app's UUID string, also used by the client code tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord("BarcodeScannerForSGST", UUID_BLUETOOTH); /* * The UUID is also included in the SDP entry and will be the basis for the connection * agreement with the client device. That is, when the client attempts to connect with this device, * it will carry a UUID that uniquely identifies the service with which it wants to connect. * These UUIDs must match in order for the connection to be accepted (in the next step) */ >catch (IOException e) < >mmServerSocket = tmp; > public void run() < BluetoothSocket socket = null; // Keep listening until exception occurs or a socket is returned while (true) < try < socket = mmServerSocket.accept(); try < // If a connection was accepted if (socket != null) < // Do work to manage the connection (in a separate thread) InputStream mmInStream = null; // Get the input and output streams, using temp objects because // member streams are final mmInStream = socket.getInputStream(); byte[] buffer = new byte[1024]; // buffer store for the stream int bytes; // bytes returned from read() // Keep listening to the InputStream until an exception occurs // Read from the InputStream bytes = mmInStream.read(buffer); if (bytes >0) < // Send the obtained bytes to the UI activity String readMessage = new String(buffer, 0, bytes); //doMainUIOp(BARCODE_READ, readMessage); if (readMessage.length() >0 && !etMlfb.isEnabled()) //Se sono nella parte di picking new ServerWorker().execute(new Object[] ); > socket.close(); > > catch (Exception ex) < >> catch (IOException e) < break; >> > /** * Will cancel the listening socket, and cause the thread to finish */ public void cancel() < try < mmServerSocket.close(); >catch (IOException e) < >> > 

I need same functionality in my application, kindly tell me if you find anything helpful related to this task.

Hello there! I would like to know if you got to get Bluetooth device reading! I’m on the same problem you mention! @Android84

Hello @sioesi, yes the solution below solve the problem but it’s better to use the barcode scanner in Bluetooth Keyboard Emulation mode

Читайте также:  Блютуз адаптер buro bu bt40b драйвер

Источник

Programmatically connecting to a Bluetooth enabled barcode scanner in Android

I am working to create an Android App that connects to a bluetooth barcode scanner. I’ve been looking for code examples of how to do this but I can not find any dealing with connecting to a device. I see lots for connecting peer-to-peer with android devices but that doesn’t seem to cover android to device. This is the code I have so far. It fails on the call to connect with a Connection refused.

UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); socket = mDevice.createRfcommSocketToServiceRecord(uuid); socket.connect(); 06-11 15:29:10.113: W/System.err(20018): java.io.IOException: Connection refused 06-11 15:29:10.133: W/System.err(20018): at android.bluetooth.BluetoothSocket.connectNative(Native Method) 06-11 15:29:10.133: W/System.err(20018): at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:212) 
Set pairedDevices = btAdapter.getBondedDevices(); 

Dumb question time, but: are you sure that bluetooth is turned on and you have the appropriate permissions set?

Yes the permissions are set to allow bluetooth connections and the bluetooth is turned on. I tested this part is working with an app called GetBlue. It can connect to my device and retrieve the scans with no problem. i just need to do the same as GetBlue but from within my app.

Have you checked that the connection isn’t being established and then refused by the other device? Perhaps it’s worth setting up some bluetooth connections between 2 Android devices for testing first.

5 Answers 5

I did find a fix to this issue, though I am not sure as to why this one works and the other did not.

UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); socket = mDevice.**createInsecureRfcommSocketToServiceRecord(uuid);** socket.connect(); 

Changing to use the Insecure call allows the connect to work and I can receive data back from socket read calls.

that’s weird. grab a copy of bluetoothChat into your workspace and see if you can make it connect to your scanner, just changing the UUID to the proper SPP one. I have no problem with the createRfcommSocketToServiceRecord() method. What API revision are you using?

This ID will only work if the barcode scanner offers a standard bluetooth SPP interface. Are you sure this device even uses that UUID?

Go and look for any documentation for connecting this scanner to something — even just a PC. And go through it, even though it’s not what you’re trying to do right now. You might learn something about the system or get ideas about how it actually works.

For instance, the presence of a special driver install for PC to make it do anything will point to it not being an SPP profile. Alternatively, if there’s a PC application for working with the scanner that connects to a «serial port» to work, then it’s pretty much definitely an SPP profile.

In the case of it not being an SPP profile, having a working connection to something like a PC at least gives you a chance to sniff the connection and maybe also data transfer, to reverse engineer something for android.

Also, with a baseline check that the hardware works for one specific application, you can rule out hardware fault. (check your android device’s bluetooth link while you’re at it!)

Читайте также:  Volkswagen bluetooth rns 510

Источник

Bluetooth сканер штрихкодов и мобильное приложение 1С (Android)

  • 2.JPG
  • 3.JPG
  • 4.JPG
  • 1.JPG

Предлагаю Вашему вниманию сервис для работы с bluetooth сканером штрихкода, который выполняет передачу данных в мобильное приложение 1С посредством фонового уведомления. Данный подход упрощает работу пользователю с оборудованием.

Предыстория

На данный момент в предприятиях занимающихся торговлей очень часто используются сканеры штрихкодов (как проводные, так и безпроводные) и терминалы сборы данных (ТСД). Разница между ними — цена! Одно устройство ТСД может стоить нескольких (а то и больше) обычных сканеров. Каждое предприятие старается сократить затраты, очевидно выбор падет на обычный сканер. И вот тут на помощь приходит мобильная платформа 1С, которая может работать с подключаемыми устройствами к мобильному устройству. Но, не все так просто.

Как работает сканер штрихкодов?

На данный момент, обычный (современный) сканер имеет два режима работы: режим разрыва клавиатуры и режим эмуляции com-порта (другое название SPP Mode).

В режиме разрыва клавиатуры сканер — это клавиатура. В таком случае необходимо чтобы:

  • Экран был включен
  • Курсор стоял в поле ввода
  • Необходимо разрабатывать особый алгоритм отработки данных

В режим SPP — это обычное устройство подключенное через com-порт, которое посылает на него сообщения (в данной случае считанный штрихкод)

  • Необходимо чтобы было запущено приложение (в наш случае 1С) для получения и обработки данных со сканера.

Очевидно, режим SPP это то что нам нужно.

Как подключить беспроводной сканер к мобильному устройству в режиме SPP Mode?

На первый взгляд все просто: включить bluetooth, найти устройство в окружении, подключиться к нему. Да, устройство подключится, но толку от него не будет. Для того чтобы работать со сканером в режиме SPP Mode необходимо дополнительное приложение, которое будет с ним работать. А именно поддерживать подключение и принимать сообщения. И тут на помощь приходит Java. С ее помощью можно разработать то самое приложение, которое нам требуется.

На инфостарте есть несколько публикаций, которые выполняют похожую функцию, но к сожалению только для ТСД. Им огромное спасибо за идею.

Сервис для работы с беспроводным сканером в режиме SPP Mode

Проштудировав множество сайтов по Java, наткнувшись на множество недоработок в мобильной платформе 1С, в конечном итоге написал приложение (правда без графического интерфейса), которое реализует требуемую функцию.

  • Сервис предоставляет функцию получению УИД устройства (только спаренного, то есть подключенного). Полученный УИД можно будет сохранить где-нибудь в константе и далее использовать его для подключения
  • Сервис предоставляет функцию подключения к сканеру (с помощью ранее полученного УИДа) и обеспечивает фоновую работу с устройством.
  • Сервис выполняет фоновую отправку уведомления в мобильное приложение 1С.
  • Сервис работает со всеми сканерами которые имеют функцию SPP Mode

Вот основное действие для запуска сервиса

#Если МобильноеПриложениеКлиент Тогда Попытка Запуск = Новый ЗапускПриложенияМобильногоУстройства(); Запуск.Действие = "com.bluetoothscanersender.action"; // Для ServiceState есть два действия // 1. GetBTAdress - получаем адрес блютуса // 2. start - выполняет подключение к сканеру и запускает процедуру для работы с сообщениями от сканера Запуск.ДополнительныеДанные.Добавить("ServiceState","start"); Запуск.ДополнительныеДанные.Добавить("BTAdress",ЗначениеКонстант.АдресBluetooth); // получим идентификатор базы, так как при нескольких базах при входящем сообщении // будет появляться ошибка "Уведомление для неизвестного приложения" СистемнаяИнформация = Новый СистемнаяИнформация; // при одной базе указать значение "" Запуск.ДополнительныеДанные.Добавить("ServiceBase_Name",""); // результат запуска будет в виде всплывающего окна "toast" из запускаемого приложения Запуск.Запустить(Истина); Исключение // сообщаяем что что-то не работает КонецПопытки; #КонецЕсли 

Вот процедура для обработки уведомлений из сервиса (все возвращаемые значения имеют тип «Строка»)

// выполняет подключения обработчика событий, который будет мониторить локальные уведомления // Процедура ПодключитьГлобальноеСобытиеОповещения() Экспорт #Если МобильноеПриложениеКлиент Тогда ОП = Новый ОписаниеОповещения("ОбработчикЛокальныхУведомлений", ЭтотОбъект); ДоставляемыеУведомления.ПодключитьОбработчикУведомлений(ОП); #КонецЕсли КонецПроцедуры // ПодключитьГлобальноеСобытиеОповещения() // Подключает процедуру-обработчик получения уведомления // // Параметры: // Уведомление - Объект, содержащий данные уведомления, у которого заполнены только поля "Текст" и "Данные", остальные содержат значения по умолчанию. // Локальное - тип Булево. Истина - уведомление было создано локально операционной системой. Ложь - было получено Push-уведомление. // Показано - тип Булево. Указывает, что уведомление было показано пользователю средствами операционной системы. // Процедура ОбработчикЛокальныхУведомлений(Уведомление,Локальное,Показано,ДопПараметр) Экспорт ГлобальноеСобытиеОповещения(Новый Структура("Отправитель,Текст",Уведомление.Текст,Уведомление.Данные)); КонецПроцедуры // ОбработчикЛокальныхУведомлений() // Обработчик перехваченного события // Процедура ГлобальноеСобытиеОповещения(Сообщение) Отправитель = Сообщение.Отправитель; Если Отправитель = "SenderBarcode" Тогда // получили штрих код Оповестить(Отправитель,Сообщение.Текст, "Сканирование ШК"); ИначеЕсли Отправитель = "GetBTAdress" Тогда // получили адрес bluetooth нашего сканера в формета "Имя сканера /// Адрес сканера" Оповестить(Отправитель,Сообщение.Текст, "Адрес bluetooth"); Иначе Возврат КонецЕсли; КонецПроцедуры 

Баги, фичи и прочие факи

Читайте также:  Bluetooth гарнитуры два телефона

При разработке приложения на Java проблем не было. Они начались при попытки «подружить» сервис и мобильного приложения 1С.

Итак, имеем следующие баги (или если хотите недоработки) в мобильной платформе 1С:

  • Самая важная проблема — мобильное приложение не может принимать внешние оповещения. Вернее в каких то версиях могло принимать, а в каких то нет. В комментариях к этой (Публикация) публикации это упоминалось. Чиниться это просто:

в файле платформы permissions.xml по адресу Android\prjandroid-arm\bin (точно также как описано в публикации) добавляем android:exported=»true» и добавляем фильтр на получаемые уведомления

в итоге должны получить следующее:

именно по этому адресу сервис будет отправлять сообщения в 1С, а 1С соответственно получать их.

В сервисе это выглядит так (сообщение отправки списка блютуз устройств):

Intent intentFor1C = new Intent("com.google.android.c2dm.intent.RECEIVE"); intentFor1C.putExtra("text", "GetBTAdress"); intentFor1C.putExtra("title", "1C"); intentFor1C.putExtra("data", (Serializable) TextOfDevice); intentFor1C.putExtra("base", BaseName);
  • Проблемы при сборки apk файла.Если на форме вы создали группу, и назначили ей свойство , например «Свертываемая», то получите ошибку «Ошибка при вызове метода объекта модели XDTO. Неверный параметр» . Вот тут Список неявных ошибок, возникающих при разработке мобильного приложения. И способы их решения есть еще пару багов. На них стоит обратить внимание
  • При сворачивании мобильного приложения 1С, и при следующем возвращении к нему, запущенный клиентский ранее сеанс зависает. И при этом требуется перезапустить приложение. Можно ли это как исправить?Если кто-то знает может поделиться информацией.

Оборудование и программное обеспечение.

При разработке я использовал:

  1. Сборщик мобильных приложений 1С версии 2.0.7.48 (в сборщике использовал ANT 1.10.5,JDK 1.8.0_181 )
  2. Мобильная платформа 1С версии 8.3.9.91 (Версия 8.3.12.67 вообще не собралась, опытным путем решил что там ошибок больше чем в выбранной 8.3.9)
  3. Планшет Samsung Galaxy Tab A (Android 5.1)
  4. Сервис для работы со сканером написан на Java c помощью Android Studio 3.2.1, с поддержкой api level 15 (взял минимальный для того чтобы приложение работало на большинстве устройств)
  5. Сканер штрих кодов Netum RD-1698LY (

Источник

Оцените статью
Adblock
detector