We are in the process of porting our C# code from Windows CE running on Intermec CN51 devices to Android using Xamarin running on both the CN51 devices as well as Zebra TC8000. Everything about these Zebra handhelds is awesome compared to the CN51's. They are just as light, feel great in the hand and the form factor when scanning is so much better than the CN51 units. However the software architecture they use for reading the scans is far from ideal. The problem is simple; speed.
It is critical for our business applications that once someone scans an item that there is audible feedback immediately from the scanner about that scan. They scan products when receiving at very fast rates so we need the scanner to respond as quickly as possible so our software architecture makes sure all the relevant barcodes for expected products are loaded into the scanner locally so we do not need any network requests to determine if a scan is good or bad. And we turn off the internal beep on the scanner so we can play the correct sounds depending on the scanned item (normal, out of stock, just in time or error not found). With the CN51 scanners we get the callback from the scanner for the barcode scan instantly so it works very well.
However with the Zebra scanners there is a perceptible delay from when you scan the items and our software actually receives the barcode scan and can process it via the Scanner.Data callback. The delay also seems to vary, and given that the callback to our code from the scanner software library passes in a ‘list’ of barcodes to process, it leads me to believe that the Zebra libraries have some kind of background thread that polls the scanner for barcodes and then passes all the scanned barcodes to us as a list on a regular basis. However clearly the response time is not good as there is a noticeable delay. The CN51 on the other hand I believe has a hardware interrupt that fires so we get called immediately when the hardware reads that scan (and we just get one of them, not a list).
I can play around with potential solutions such as leaving the scanner beep in place, but in the past we found that was not optimal because the employee has to pay attention to two beeps for every item scanned. A scanner read beep (which happens instantly), and if there is an error or the item needs to be flagged then a second beep indicating the difference if it was not a regular item that needs no extra flagging. If we leave the internal scanner beep disabled, the delay between scanning the item and actually getting the audio feedback is going to slow down our work productivity immensely.
I tried to get onto the Zebra support site so I can submit tickets, but to get there I need to sign up on the web site and apply for it (even though I am actively able to log into these forums). Which in itself is not an issue except that the final screen of the signup process requires me to enter a country using a country drop down, but the freaking drop down is empty! Grr. Someone needs to fix that ASAP.
Anyway at the end of the day the software design of this library is severely lacking and we have ordered 10 of these units for a test deployment. If we can't get this sorted out, we will likely have to send them all back to our supplier and just get more of the existing CN51 units we have been using to date (which work great on Android and actually support Marshmallow 6.0 while the TC8000 is stuck at Lollipop 5.1).
I scoured both the Xamarin API docs and the Java API docs to find anything to speed this process up, but so far have drawn a blank. Any help would be appreciated!