Autore Topic: Accesso lettore barcode integrato  (Letto 121 volte)

Offline berpao

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
Accesso lettore barcode integrato
« il: 10 Agosto 2017, 11:06:40 CEST »
0
Ciao a tutti, grazie in anticipo per l'eventuale attenzione che darete a me e al mio problema. Veniamo subito al dunque; sto sviluppando una app (è la mia seconda app quindi non è che abbia tantissima esperienza!) per l'azienda in cui lavoro. Lo scopo dell'app, giusto per dare un quadro completo, è quella di gestire il prelievo e l'imballaggio di articoli presi dal magazzino; quindi abbiamo un device android con barcode reader integrato che colloquia con un web service (.net web api 2) per la comunicazione server side. Tutto gira bene a parte il fatto che il bottone hardware che pilota il barcode reader sul device è un po' scomodo e volevo sostituirlo/affiancarlo con un bottone software; e qui ci sono i problemi. Il fornitore del device non ha fornito un SDK per poter interagire con lo scanner e mi chiedevo se c'era qualche libreria/sdk o cmq qualche modo per parlare con lo scanner integrato. Attenzione, non vorrei usare la fotocamera del device per implementare un lettore di barcode (come fa la libreria ZXing o le google vision API mi sembra); io vorrei interagire direttamente con l'hardware del device. Attualmente il bottone hardware accende il barcode reader e tramite una libreria open source reperibile all'url https://code.google.com/archive/p/android-serialport-api/ riesco a leggere i dati inviati sulla porta seriale (non riesco però ad attivare il barcode come fa il bottone hardware). Le strade da me percorse sono state:

- ho provato a vedere l'evento generato dalla pressione del bottone hardware e a scatenarlo anche io, ma senza successo (sembra che l'attivazione dello scanner sia al di fuori di questo evento)
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
          ....
    }

- ho provato ad identificare il barcode usando le api android.hardware per poterci lavorare, ma non ho trovato niente ne come sensore, ne come hardare usb, ne come fotocamera, ne come tastiera (magari ho sbagliato io ma sembra che tramite android.hardware il barcode non sia accessibile)

- ho provato sdk di altri produttori (ipotizzando magari l'utilizzo degli stessi chipset, oramai la fantasia galoppa che è una meraviglia), ma ovviamente è stato un vicolo cieco.

Non so,voi avete idee, suggerimenti o tentativi che potrei fare?
Scusate la spataffiata, ma volevo darvi il maggior numero di informazioni possibile sulla situazione...

Ah, il device è un 6 pollici che monta Lollipop (5.1.1) e ha una fotocamera posteriore, una anteriore e il lettore barcode 2D più una serie di sensori (prossimità, magnetico,ecc). L'app è stata sviluppata con android studio e il min sdk sono le api 21 (lollipop 5.0 credo)

Grazie a tutti e spero qualcuno riesca ad aiutarmi a digerire questo peperone  :-)
Paolo

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 725
  • Respect: +153
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Accesso lettore barcode integrato
« Risposta #1 il: 16 Agosto 2017, 09:51:39 CEST »
0
Problema interessante, ma ho paura che non abbia soluzione.

Da quello che scrivi sembra che il lettore di barcode si comporti come un dispositivo esterno. Se questo è vero c'è veramente poco da fare: il tasto hardware controllerebbe tale dispositivo senza passare per android, se non per fornire i dati.

A proposito: spiega bene come fai a leggere i dati e soprattutto come fai a sapere quando devi andare a leggerli.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline berpao

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
Re:Accesso lettore barcode integrato
« Risposta #2 il: 16 Agosto 2017, 11:24:27 CEST »
0
Ciao, innanzitutto grazie per la risposta. Si il problema è ostico e interessante, mi ci sto "divertendo" da  un po' :)
Per la lettura dei dati viene usata una libreria (credo in c++) che è quella indicata nel mio post precedente (https://code.google.com/archive/p/android-serialport-api). In realtà questa libreria era l'unica cosa installata (per la gestione del barcode) sul tablet dal fornitore; nel progetto c'è una app di esempio da cui ho preso spunto. In sostanza abbiamo una classe ("SerialPort") che da accesso all'InputStream e all'OutputStream della porta seriale dello scanner (non ho molte informazioni a riguardo, sembra appunto che lo scanner invii i dati su questa porta seriale accessibile tramite la libreria c/c++ e che la classe java SerialPort usi la libreria in oggetto tramite JNI). Quando si accede alla porta seriale, viene creato un nuovo thread che rimane in attesa di eventuali dati dallo scanner; nel momento in cui avviene la lettura il thread in ascolto legge i dati e li processa. Io ho modificato un po il giro per poter integrare il tutto nella mia app, ma il succo è lo più o meno lo stesso.
In realtà il fornitore, dopo diverse insistenze, mi ha girato una app (compilata) dove in teoria c'è quello che serve a me; il problema che questa app usa oltra alla libreria libserial_port.so che uso io, altre 4 librerie (non documentate). Ho provato a vedere se c'è modo di vedere i metodi pubblici di queste librerie (magari trovavo un metodo che mi permetteva di interagire con lo scanner direttamente!) ma non ho esperienza in c/c++ quindi ciccia. Non so, se ti viene in mente qualche idea fammelo sapere :)
Ciao e grazie per il momento
P

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 725
  • Respect: +153
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Accesso lettore barcode integrato
« Risposta #3 il: 16 Agosto 2017, 12:15:20 CEST »
0
Se non l'hai già fatto, prova a decompilare l'app del fornitore, leggendone il codice forse si capisce a cosa servono quelle librerie.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline berpao

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
Re:Accesso lettore barcode integrato
« Risposta #4 il: 16 Agosto 2017, 12:30:46 CEST »
0
argh....si può fare? Ovviamente solo per scopi educativi, si intende...
P

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 725
  • Respect: +153
    • Github
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Huawei P9 Lite
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:Accesso lettore barcode integrato
« Risposta #5 il: 16 Agosto 2017, 13:49:26 CEST »
0
Sì si può fare.

Non so consigliarti come procedere, ma qui qualche info in merito http://www.html.it/articoli/decompilare-ed-offuscare-il-codice-di-unapp-android/
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline berpao

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
Re:Accesso lettore barcode integrato
« Risposta #6 il: 16 Agosto 2017, 14:14:11 CEST »
0
Grazie, do un'occhio, già dopo il tuo ultimo post ho guardato un po' su internet e ho trovato https://sourceforge.net/projects/jadx/files/, vedo cosa riesco a tirar fuori...
Per il momento grazie, vi tengo aggiornati... nel frattempo se ti viene in mente qualche altra idea, spara pure.
Ciao
P