Soru Android uygulamasında ZXing gömme


Ben de onun app gömülü ZXing barkod tarayıcı olması gereken başka bir şanssız android geliştirme acemi değilim.

Burada, yığın akışında bunun nasıl yapılacağını soran çok fazla soru var ama bunların hiçbiri, yeni başlayanlar için gerçekten anlaşılabilir ve açıklayıcı olan bir cevaba sahip değil. Bütün cevaplar "Yapmanız gereken tek şey ZXing projesinin çekirdek kütüphanesini oluşturmak, projenize referans vermek ve daha sonra ZXing'in android / dizinindeki bazı kodları uygulamanıza kopyalamaktır". Ama bu bir noob için çok yararlı değil.

Projemde referans verilen ZXings çekirdek kitaplığım var. Barkod Okuyucu uygulaması kaynağım açık. Barkod Okuyucu uygulamasının kodunu okuyup anlamaya çalışıyorum ama bilgi seviyem için çok karmaşık.

Sadece bir barkod tarayıcısı açıldığında, tarayıcı sadece bir barkodu tarayabilmeli, kod çözebilmeli ve numaraları geri göndermeyecek, herhangi bir yere kodu göndermeye gerek duymayacak bir butonum var. Herhangi bir bilgi vb olsun, bu şeylerin kendime dikkat et. Sadece butona tıklayarak başlayan, kodu tarar ve bana sonuç veren basit bir tarayıcıya ihtiyacım var. Ama bunu kendim nasıl yapacağımı anlayamıyorum. ZXing tarayıcısından sadece bazı metinleri kopyalamanız gerekiyorsa, bunun yapılması zor olmamasının, sadece kodunu anlamanız gerektiğini varsayıyorum.

Eğer birisi bunu açıklayabilirse (kodun hangi kısımlarının kopyalanacağını, tarayıcıya nasıl tıklanacağını onClick yönteminde vb. Söyleyin) lütfen yapın, eminim ki bende bunun için gerçekten minnettar olacak birçok insan var. olmak.


21
2018-05-11 19:39


Menşei


Sadece BarcodeScanner uygulamasının amacı ile yapmak için iyi bir nedeniniz var mı? - FoamyGuy
Evet, kesinlikle niyetleri kullanarak yapardım, ama karar vermek bana bağlı değil. - boogieman
Intents'ı kullanmamanın iyi bir nedeni olan kişi mi? - FoamyGuy
emin değilim, ama bu gerçekten önemli değil, ben tarayıcıya uygulamayı gömmek zorundayım :) - boogieman
Ayrıca bir niyet kullanırım, ancak kullanıcının ZXing uygulamasının yüklü olması gerektiğine dair bir neden olabilir ve eğer gömülü ise, o olmaz. - Mathias Conradt


Cevaplar:


Tam olarak ne yapmak istediğini yapmak zorundaydım. O kadar kolay değildi, ama çok da kötü değildi. Ayrıca benim ilk (ticari veya başka türlü) Android uygulaması oldu. Yaptığım şey:

  • Derlenmiş ZXing projesini edinin ve makinenizde çalışıyor. Orada bunun nasıl yapılacağı konusunda iyi bir öğretici İşte.
  • Bu kodu ihtiyaçlarınıza göre uyarlayın. Projenin birçoğunu sadece temel tarayıcıya ayırdım. Daha sonra projemin geri kalanı etrafında yaptım. İşte bunu nasıl yapacağız.

  • CaptureActivity'yi çekirdekte olabildiğince basit hale getirin. İhtiyacınız olan tek şey çekirdek tarayıcı kodundan döndürülen sayıdır. İşte projemin yapısının bir resmi:

Structure of Adapted ZXing project

  • Bulmanız gereken şey, değiştirilmiş Etkinlik Sınıfınızın çalışması için 4 dosyayı değiştirmeniz gerektiğidir. Bu dosyalar, CameraCaptureActivity sınıfı, CaptureActivityHandler sınıfı ve Decode Thread ve Decode işleyicisi sınıflarıdır. Bu dosyaları barındırdım İşte.

  • Bu dört dosyayı alın ve bunları ZXing çalışma projenizin bir kopyasına koyun. Orijinal CaptureActivity ve değiştirdiğiniz diğer Orijinal Konuları ve İşleyici Sınıflarını kaldırın. (CaptureActivityHandlerDemo dosyasını, yanlışlıkla yüklendiği gibi yoksayın)

  • Paket adlarını çalışan ZXing paket adlarıyla eşleşecek şekilde değiştirin. Etkinlikinizin, bu Sınıfların dördünde de aynı şekilde adlandırıldığından emin olun. Etkinlik Sınıfının kendisi yerine "getHolder" uygulayan bir arayüzde geçmek iyi bir fikir olabilir.

  • Bildirinizi, Etkinlik Adınızdaki değişikliklerle güncellediğinizden emin olun. Aktiviteye gitmenin bir yolu olduğundan emin olun - belki de amaç filtre alanında varsayılan sınıf olun.

  • Etkinliğiniz için bir düzen dosyası ekledim - bu çok basit, ancak tarayıcıyı çalışır duruma getirmek için ihtiyacınız var. buna camera_capture.xml denir

Umarım bu, kalkıp kaçmak için ihtiyacınız olan her şeydir. Bu kolay bir süreç değildir ve maalesef size tüm projemi ticari bir ürün olarak veremem.

İyi şanslar!!

PS lütfen bu soruya yorum olarak herhangi bir soru gönderin ve yardım için elimden gelenin en iyisini yapacağım.


22
2018-05-12 02:56



Çok teşekkürler CaspNZ, cevabınız gerçekten faydalı ve sanırım neredeyse işe yaradı ama hala bazı problemlerim var. Söküldüğünüz sınıfları, paketlenmiş isimlerini ve tezahür dosyasını kopyaladım. Ayrıca, CameraCaptureActivity özelliğini, Rotateable aktivitesi yerine Etkinliği genişletmek için değiştirdim ve bu sınıfları hiçbir yerde bulamadığım için IParentActivity uygulamasını gerçekleştirmemeyi sağladım. Şimdi benim apps ana aktivite kaputeaktivite başladığınızda tarayıcı ekranda görünür ama hiçbir şey yapmıyorum, ben sadece kamera görünümünü görüyorum ama kodları tarama yok. - boogieman
Tamam, burada birkaç olasılık var - 1, tarayıcı başlatılmıyor (bunun, onCreate yönteminizde ve onResume yöntemlerinde gerçekleştiğinden emin olun), 2, bir nedenle geri arama başarısız oluyor ve 3 Hata var veya geri dönüşü engelleyen bir kod değişikliği. - Caspar Harmer
Tüm kod türlerinin taranmakta olduğundan emin olmak için İşleyici veya İş parçacığı sınıfını kontrol edin. QR kodları dışındaki tüm kodları devre dışı bıraktığımı düşünüyorum. Kodun oraya ulaşıp ulaşmadığını görmek için işleyiciye ve iş parçacığı sınıflarına bazı sınır değerler koyun. Bu yardımcı olursa bana bildirin. - Caspar Harmer
Oh ve Rotateable Activity ve Arayüzler için özür dilerim - Onları kaldırmak unuttum ... - Caspar Harmer
İşe yarıyor! Başından beri işe yaramadı, bu yüzden hiçbir kod veya barkod tarandığında herhangi bir diğer işaretler yoktu barkod bu yüzden barkod tarandı, bu yüzden barkod tarama hiç, aptal bana: D çok çok teşekkürler CaspNZ, Yardımın için sağol. - boogieman


Barkod Tarayıcısını çektim ve bir kütüphane projesine dönüştürdüm ve IntentIntegrator üzerinden barkodları tararken ihtiyacınız olmayan işlevselliğin çoğunu kaldırdım.

Talimatları olan proje şu adreste mevcuttur: https://github.com/embarkmobile/zxing-android-minimal.

Eğer zaten Maven kullanıyorsanız, projenize dahil etmek gerçekten çok kolay. Değilse - kodu CaspNZ tarafından açıklanan yaklaşımı kullanarak projenize kopyalayabilirsiniz.


7
2017-12-14 15:50