Osadzanie Zxingu w aplikacji na Androida

Więc jestem kolejnym pechowym początkującym programistą Androida, który musi mieć wbudowany skaner kodów kreskowych ZXing w swojej aplikacji.

Jest wiele pytań pytających, jak to zrobić tutaj na stackoverflow, ale żadne z nich nie ma odpowiedzi, która jest naprawdę zrozumiała i wyjaśniająca dla początkujących. Wszystkie odpowiedzi mówią coś w stylu " wszystko, co musisz zrobić, to zbudować podstawową bibliotekę projektu ZXing, odnieść się do niego do swojego projektu, a następnie skopiować kod z katalogu ZXing android / do swojej aplikacji i jesteś skończony". Ale to nie jest bardzo pomocne dla noob.

Mam bibliotekÄ ™ zxings core, do ktĂłrej siÄ ™ odnosiĺ ' em w moim projekcie. Mam otwarte źródło aplikacji do skanowania kodów kreskowych. Próbuję przeczytać i zrozumieć kod aplikacji skanera kodów kreskowych, ale jest to zbyt skomplikowane dla mojego poziomu wiedzy.

Chcę tylko mieć przycisk w mojej aplikacji, który po naciśnięciu otwiera skaner kodów kreskowych, skaner powinien być w stanie tylko zeskanować kod kreskowy, dekodować go i zwrócić mi numery, nie trzeba wysyłać kodu gdziekolwiek, aby uzyskać jakiekolwiek informacje itp., zajmę się tymi rzeczami osobiście. Potrzebuję tylko prostego skanera, który zaczyna się po kliknięciu przycisku, skanuje kod i daje mi wynik. Ale sama Nie wiem, jak to zrobić. Zakładam, że nie powinno to być trudne do zrobienia, jeśli wystarczy skopiować jakiś tekst ze skanera ZXing, wystarczy zrozumieć jego kod.

Więc jeśli ktoś może to wyjaśnić (powiedzieć, które części kodu skopiować, jak uruchomić skaner w metodzie buttons onClick itp.) proszę to zrobić, jestem pewien jest mnóstwo ludzi, którzy będą za to wdzięczni, tak jak ja.

Author: Julius Vainora, 2011-05-11

2 answers

Musiałem zrobić dokładnie to, o co Cię proszono. To nie było takie proste, ale też nie było tak źle. Była to również moja pierwsza (komercyjna lub inna) aplikacja na Androida. To co zrobiłem było:

  • Pobierz skompilowany projekt ZXing i działa na Twojej maszynie. Tam jest to dobry tutorial jak to zrobić tutaj .
  • Dostosuj ten kod do swoich potrzeb. Zdjąłem wiele z projektu Tylko do podstawowego skanera. Następnie zbudowałem resztę mojego projektu wokół niego. Oto jak to zrobić.

  • Dostosuj CaptureActivity w core, aby było tak proste, jak to możliwe. Wszystko czego potrzebujesz to numer zwrócony z kodu skanera. Oto zdjęcie struktury mojego projektu:

Struktura zaadaptowanego projektu ZXing

  • Przekonasz się, że musisz zmodyfikować 4 pliki, aby Twoja zmodyfikowana Klasa aktywności działała. Pliki te są klasą CameraCaptureActivity, klasą CaptureActivityHandler oraz klasami obsługi dekodowania i dekodowania. Ja przechowujemy te pliki tutaj .

  • Weź te cztery pliki i umieść je w kopii swojego działającego projektu ZXing. Usuń oryginalną CaptureActivity oraz inne oryginalne wątki i klasy obsługi, które zastąpiłeś. (Zignoruj plik CaptureActivityHandlerDemo, ponieważ został tam umieszczony przez pomyłkę)

  • Zmień nazwy pakietów, aby pasowały do działających nazw pakietów ZXing. Upewnij się, że Twoja aktywność ma taką samą nazwę we wszystkich czterech z tych klas. Może być dobrym pomysłem jest Przejście W interfejsie, który implementuje "getHolder", a nie samą klasę aktywności.

  • Upewnij się, że masz zaktualizowany manifest o wszelkie zmiany nazwy aktywności. Upewnij się, że masz sposób nawigowania do aktywności - być może Uczyń ją klasą domyślną w obszarze filtra intencyjnego.

  • Dodałem również plik układu dla Twojej aktywności - jest to bardzo proste, ale to wszystko, czego potrzebujesz, aby uruchomić skaner i działać. nazywa się camera_capture.xml

Mam nadzieję, że to wszystko, czego potrzebujesz, aby zacząć działać. Nie jest to łatwy proces i niestety nie mogę dać ci całego mojego projektu, ponieważ jest to produkt komercyjny.

Powodzenia!!

PS proszę pisać wszelkie pytania jako komentarze do tej odpowiedzi, a ja postaram się pomóc.

 22
Author: Caspar Harmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:29:50

Rozwidliłem Skaner Kodów Kreskowych i przekonwertowałem go do projektu bibliotecznego i usunąłem większość funkcji, których nie potrzebujesz, jeśli skanujesz tylko Kody kreskowe za pomocą IntentIntegrator.

Projekt Wraz z instrukcją jest dostępny pod adresem https://github.com/embarkmobile/zxing-android-minimal .

To jest naprawdę łatwe do włączenia go do projektu, jeśli już używasz Maven. Jeśli nie-możesz skopiować kod do swojego projektu, korzystając z podejścia opisanego przez CaspNZ.

 7
Author: Ralf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-14 15:50:30