Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   ZXing in Android-App einbinden (Barcode) (https://www.delphipraxis.net/185467-zxing-android-app-einbinden-barcode.html)

DeddyH 13. Jun 2015 18:21

ZXing in Android-App einbinden (Barcode)
 
Seit 6 Wochen habe ich nun auch das "Vergnügen", mich mit dem Feueraffen beschäftigen zu dürfen. Die derzeit in Arbeit befindliche App soll Barcodes einscannen. Das klappt unter Android mit ZXing sehr zufriedenstellend, nur habe ich dabei das Problem, dass die originale "Barcode Scanner"-App dabei bereits installiert sein muss. Im Zuge meiner Recherchen bin ich nun auf den IntentIntegrator gestoßen. Dazu ein paar kurze Fragen:
- Verstehe ich das richtig, dass ich den diesen als *.jar mit deployen, also den Bibliotheken hinzufügen muss?
- Die Wrapperdatei kann ich mir ja vermutlich mit java2op erstellen lassen (von Union gibt es da AFAIK aber bereits etwas fertiges), ist es dann auch möglich, die Dialoge dort gleich mal einzudeutschen?
- Falls nicht, müsste die *.jar-Datei dann selbst kompiliert und das Übersetzen im Code selbst erledigt werden, richtig?

Sorry für die vermutlich dummen Fragen, aber ich bin auf dem Gebiet auch wieder Neuling (und mein Lehrer kann das alles nicht richtig erklären, die Mitschüler sind auch doof, etc. :mrgreen:)

Danke fürs Lesen.

mensch72 13. Jun 2015 19:01

AW: ZXing in Android-App einbinden (Barcode)
 
https://www.youtube.com/watch?v=yJI2HaNMReI

statt der ZXing APP Nutzung lieber eine echte LIB fest einbinden... ZBAR ist hier was kostenloses, wenn es um PDF417 Codes geht, können komerz. Libs auch ganz schön ins Geld gehen!

Olli73 13. Jun 2015 19:05

AW: ZXing in Android-App einbinden (Barcode)
 
Ich habe leider keine Antwort auf deine (eigentliche) Frage, aber trotzdem eine Lösung des Problems:

Wenn du 60$ über hast, dann kauf dir eine der beiden folgenden Komponenten:

OBR Library for Android (uses ZXing Library, supports Android)

Optical Barcode Recognition for FireMonkey (uses ZBar bar code reader library, supports Windows 32, Windows 64, OS X, iOS and Android)

Wir haben uns für letztere entschieden, insbesondere da nicht auf Android beschränkt (wobei wir derzeit nur Android und Windows unterstützen).

DeddyH 13. Jun 2015 20:48

AW: ZXing in Android-App einbinden (Barcode)
 
Danke für die Tipps. Von WinSoft haben wir sogar alles lizenziert, bei ersten Tests war die Performance allerdings dermaßen im Keller, dass wir uns doch für ZXing entschieden haben. Es geht ja auch eher darum, wie der IntentIntegrator im Detail einzubinden ist. Dass der dann den Benutzer ggf. dazu ermutigt, eine "Fremdapp" zu installieren, damit können wir leben, zumal dabei für den Kunden keine zusätzlichen Kosten entstehen. Das hat zudem den Vorteil, dass der eigentliche Scanner dann automatisch aktualisiert wird, ohne dass wir etwas dazu tun müssten.

Olli73 13. Jun 2015 21:51

AW: ZXing in Android-App einbinden (Barcode)
 
Zitat:

Zitat von DeddyH (Beitrag 1305037)
Von WinSoft haben wir sogar alles lizenziert, bei ersten Tests war die Performance allerdings dermaßen im Keller, dass wir uns doch für ZXing entschieden haben.

Also bei uns war die Umstellung auf Winsoft ein riesen Fortschritt! :gruebel:

Union 15. Jun 2015 06:29

AW: ZXing in Android-App einbinden (Barcode)
 
Zitat:

Zitat von DeddyH (Beitrag 1305029)
- Die Wrapperdatei kann ich mir ja vermutlich mit java2op erstellen lassen (von Union gibt es da AFAIK aber bereits etwas fertiges), ist es dann auch möglich, die Dialoge dort gleich mal einzudeutschen?

Achtung, mein Tool (bzw. die damit erstellten Interfaces) war nur eine Übergangslösung für XE5 und XE6. Ab XE7 sollte Java2OP von EMB verwendet werden, denn dort wurde eine Registrierung für Array-Properties hinzugefügt.

DeddyH 15. Jun 2015 07:27

AW: ZXing in Android-App einbinden (Barcode)
 
Danke für die Warnung, mit java2op habe ich es auch hinbekommen, nur habe ich nun das nächste Problem.
Zitat:

Code:
IntentIntegrator integrator = new IntentIntegrator(yourActivity);

Was zum Geier ist denn meine Activity? Bei den Codebeispielen von Brian Long, die ich bislang verwende, wird StartActivityforResult der SharedActivity aufgerufen, nur finde ich hier keinen Ansatzpunkt. Hilfe!!!einseinself

Thomas_K 15. Jun 2015 09:11

AW: ZXing in Android-App einbinden (Barcode)
 
Hier nur der Vollständigkeitshalber der Link zu dem Open Source ZXing.Delphi Projekt https://github.com/Spelt/ZXing.Delphi Das wär (vieleicht) ein anderer Ansatz, was aber wieder andere Fragen nach sich ziehen könnte. :)

Wenn du eine jar Datei in ein Android Projekt unter Bibliotheken zu den anderen jar Dateien hinzufügt, wird sie automatisch mit übertragen, ohne dass sie unter Bereitstellung extra auftaucht oder von Hand hinzugefügt werden muss. Greift die jar Datei selbst aber wieder auf eine spezielle *.so Datei zurück, muss diese wieder von Hand mit bereitgestellt werden, unter Remote-Pfad ist dann ganz normal der Standard lib Verzeichnis zu wählen „library\lib\armeabi-v7a\“.

Codehunter 15. Jun 2015 10:13

AW: ZXing in Android-App einbinden (Barcode)
 
Zitat:

Zitat von DeddyH (Beitrag 1305029)
Die derzeit in Arbeit befindliche App soll Barcodes einscannen.

Hallo Detlef,

Das kommt demnächst auch auf mich zu. Im Einsatz derzeit seit etlichen Jahren eine Lösung, die im Opera-Mobile-Browser auf Rugged Handhelds läuft und ein PHP-MySQL-Backend hat. Inzwischen alles derart überaltert dass die Akkus in den Geräten nicht mehr wollen und kein Ersatz beschafft werden kann. Erst wenn nix mehr läuft sieht der Chef die Notwendigkeit und dann soll immer alles ganz schnell ausgetauscht sein :-(

Die Neuentwicklung ist derzeit noch nicht in eine bestimmte Richtung festgelegt. Ich würde gern auf Delphi setzen weil ich da A) teilweise auf vorhandene Sourcen zurückgreifen kann und B) mich nicht groß einarbeiten muss. Alles aus Zeitgründen.

Hast du Erfahrungen mit der Einbindung von dedizierten Barcode-Scannern? Also nicht die Standard-Schnittstellen für die Allerweltskamera sondern die Hardware-Scanner (z.B. Intermec etc.)

Idealerweise würde ich von MySQL mal abgesehen auf ein Backend gleich ganz verzichten und mich z.B. mit UniDAC direkt vom Handheld an die DB verbinden. Lizenz für UniDAC Pro ist vorhanden (müsste evtl. mal aufgefrischt werden).

Ich hatte mal probeweise mit Freepascal/Lazarus was für die alten Windows-Mobile-Kisten ausprobiert, aber das war sowohl von der Entwicklungszeit als auch von der Performance her zum Heulen. Die Handhelds müssen eh ausgetauscht werden. Darum geht meine Denke in die Richtung Android und Firemonkey - lasse mich da aber auch gern umstimmen.

Grüße
Cody

DeddyH 15. Jun 2015 10:24

AW: ZXing in Android-App einbinden (Barcode)
 
Von Erfahrungen würde ich nicht reden wollen, aber die angesprochene App kann auch den Honeywell Dolphin 70e ansprechen. Dazu musste ich das SDK des Herstellers herunterladen und einbinden, mit java2op eine Wrapper-Unit erstellen lassen und das Ganze dann über die Routinen von Brian Long ansprechen.

Codehunter 15. Jun 2015 10:51

AW: ZXing in Android-App einbinden (Barcode)
 
Was mich an der ganzen Thematik Industrial Handhelds so nervt sind die unglaublich trägen Migrationsprozesse. Am Tag X wo ein Plattformwechsel ansteht wird schon das Budget so knapp bemessen, dass man nur Hardware ins Auge fassen kann, die herstellerseitig schon (fast) wieder abgekündigt sind. Von den OS-Updates mal ganz abgesehen. Der Dolphin 70E läuft ja auch "noch" mit Android 4.0. Man entwickelt praktisch ständig für und auf obsoleten Plattformen.

Und kaum hat man die Software fertig holt einen der technische Fortschritt wieder ein und man darf seinem Vorgesetzten erklären, dass nun schon wieder alles von vorne losgehen muss. Brrr....

Das ist der Hauptgrund warum ich von Windows CE/Mobile/Embedded weg will. Die Brüche zwischen den Major-Releases sind einfach zu groß (Von CE 4.3 bis 6.5 gings ja noch, dann der große Cut zu WM7 und jetzt wieder ein Cut zu irgendwas mit "10"). Bei Android scheinen mir die Übergänge "sanfter" zu sein. Oder täuscht das?

DeddyH 15. Jun 2015 11:02

AW: ZXing in Android-App einbinden (Barcode)
 
Da musst Du erfahrenere User fragen, ich mache wie gesagt erst seit 6 Wochen mit Firemonkey und dementsprechend mit mobiler Entwicklung herum (OK, vorher ein paar kleine Versuche mit jQuery, aber da spielt das OS ja keine Rolle).

Codehunter 15. Jun 2015 11:54

AW: ZXing in Android-App einbinden (Barcode)
 
Ich fürchte fast, in der Kombination Delphi + Firemonkey + Embedded Handheld dürftest du schon einer der erfahrendsten User weltweit sein :lol:

DeddyH 16. Jun 2015 07:51

AW: ZXing in Android-App einbinden (Barcode)
 
Das Problem aus #7 besteht immer noch, ich drehe mich da im Kreis :oops:

Union 16. Jun 2015 07:57

AW: ZXing in Android-App einbinden (Barcode)
 
Zitat:

Zitat von DeddyH (Beitrag 1305094)
Danke für die Warnung, mit java2op habe ich es auch hinbekommen, nur habe ich nun das nächste Problem.
Zitat:

Code:
IntentIntegrator integrator = new IntentIntegrator(yourActivity);

Was zum Geier ist denn meine Activity? Bei den Codebeispielen von Brian Long, die ich bislang verwende, wird StartActivityforResult der SharedActivity aufgerufen, nur finde ich hier keinen Ansatzpunkt. Hilfe!!!einseinself

Das heisst SharedActivity

Delphi-Quellcode:
uses
  FMX.Helpers.Android;
...
intent := TJIntent.Create;
intent.setAction(StringToJString('com.google.zxing.client.android.SCAN'));
SharedActivity.startActivityForResult(intent, 0);

DeddyH 16. Jun 2015 08:08

AW: ZXing in Android-App einbinden (Barcode)
 
Danke, das ist exakt der Code, den ich zum Scannen verwende. Wenn ich aber einfach den IntentIntegrator mit der SharedActivity aufrufe, friert die App ein, irgendetwas scheint da noch zu fehlen. Dieses Java-Wrapper-Gedöns kann einen echt zur Verzweiflung treiben.

[edit] OK, nicht ganz exakt, nachdem ich noch einmal nachgeschaut habe, aber im Prinzip tue ich dasselbe, nur über eine Klasse bzw. deren Ableitung verteilt. [/edit]

Codehunter 28. Dez 2015 09:58

AW: ZXing in Android-App einbinden (Barcode)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DeddyH (Beitrag 1305114)
Von Erfahrungen würde ich nicht reden wollen, aber die angesprochene App kann auch den Honeywell Dolphin 70e ansprechen. Dazu musste ich das SDK des Herstellers herunterladen und einbinden, mit java2op eine Wrapper-Unit erstellen lassen und das Ganze dann über die Routinen von Brian Long ansprechen.

Hallo Detlef,

ich hoffe du hast "Warmnachten" gut rum bekommen? ;-) Ich jedenfalls bin froh dass der Stress vorbei ist und ich mich nun wieder in Ruhe mit Java rumärgern darf ^^

Also Situation ist folgende: Nachdem ich ein halbes Jahr auf die Freigabe für die Anschaffung der Dolphin 75e warten musste, kamen die endlich kurz vor Weihnachten. Ich habe mir von Honeywell das SDK für den Dolphin 75e runtergeladen. Da drinnen eine DataCollection.jar und einige XyzActivity.java. Die JAR habe ich durch Java2Pas geschickt und die erzeugten Interface-Units dann händisch zu einer einzigen Unit zusammengepackt wegen Sichtbarkeitsproblemen und Kreuzbezügen. Dabei kam die HoneywellD75E.pas heraus, welche ich hier mal als Anhang beifüge.

Desweiteren habe ich die DataCollection.jar als zusätzliche Android-Bibliothek in die Projektverwaltung aufgenommen und in meiner AndroidManifest.template.xml die Zeile <%services%> gegen <service android:exported="false" android:name="com.honeywell.aidc.mytestapp"/> ausgetauscht, weil sich der Java-Compiler andernfalls über einen fehlenden Name-Parameter im Service-Tag aufgeregt hat. Ob das so sauber ist in den Namenszweig von Honeywell zu gehen, keine Ahnung. Sah erstmal schick aus und der Compiler war zufrieden ^^

So, und nun steh ich da wie ein Ochs vorm Scheunentor und komm nicht weiter. Soweit ich die Interfaces verstehe, müsste ich ein Objekt "JBarcodeReader" instantiieren und dann z.B. über addBarcodeListener einen Eventhandler zuweisen welcher auf Ereignisse vom Barcode-Dienst lauscht und dann an meine App weiterleitet. Ferner habe ich inzwischen aufgeschnappt, dass ich eine Activity im Delphi erweitern müsste, wobei mir da im Moment auch die ??? überm Kopf kreisen.

Einfach gesagt, ich brauch mal eine Art Todo-Liste wie man hier vorgehen muss. Denn die verfügbaren Tutorials setzen IMHO Erfahrung mit Android-Java-Entwicklung voraus, die ich leider nicht habe. Vielleicht kannst du mal einen kleinen Einblick in deine Implementierung vom Dolphin 70e geben? Evtl. ist das ja ähnlich...

Grüße
Cody

DeddyH 28. Dez 2015 11:42

AW: ZXing in Android-App einbinden (Barcode)
 
Irgendwie sieht das komplett anders aus als das SDK für den 70e. Ich kann ja mal bei Gelegenheit meine Units auf das Nötigste eindampfen und Dir zukommen lassen, vielleicht geht es ja damit sofort.

Codehunter 28. Dez 2015 12:22

AW: ZXing in Android-App einbinden (Barcode)
 
Das wär echt supi. Ich dachte mir schon dass es da Unterschiede gibt denn trotz der Namensähnlichkeit sind der Dolphin 70e und der 75e ziemlich verschieden. Andere Hardware, anderes OS... Scheinbar hat die Honigquelle auch ein ganz neues SDK gebacken. Wobei ich ja "nur" einen Einstieg brauche.

EDIT: Ich vermute mal, du hast auch die Windows-Version vom Dolphin oder? Ich habe nämlich die Android-Version...

QuickAndDirty 8. Jun 2016 07:58

AW: ZXing in Android-App einbinden (Barcode)
 
Ich weiß nicht ob es hilft...
Hast du die Callback Methode im Message Manager registriert?
Delphi-Quellcode:
SubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage);

Codehunter 8. Jun 2016 15:16

AW: ZXing in Android-App einbinden (Barcode)
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1339725)
Ich weiß nicht ob es hilft...
Hast du die Callback Methode im Message Manager registriert?
Delphi-Quellcode:
SubscriptionID := TMessageManager.DefaultManager.SubscribeToMessage(TMessageResultNotification, HandleActivityMessage);

Ich habe es inzwischen so gelöst, dass ich die Firemonkey-Java-Activity umgeschrieben und die Honeywell-SDK-Lib eingebunden habe. Das funktioniert erstaunlich gut. Dadurch hänge ich eben NICHT am Android-Message-Queue sondern direkt an den Hardware-Schnittstellen. Einzig negativer Seiteneffekt dessen ist, dass sich die Apps nicht mehr direkt aus der IDE heraus starten lassen. Man muss das Icon auf dem Gerät antippen. Der Debugger klinkt sich trotzdem ein. Damit kann ich leben.

Damit habe ich mich zwar bei dem Projekt auf diese Hardware-Basis festgelegt, aber das ist im Business-Umfeld nicht das große Problem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz