Blackberry QR ve UPC Barcode Okutma Uygulaması

Batuhan Düzgün tarafından yayınlanmıştır 15. February 2012 07:48

Merhaba arkadaşlar bu yazımda sizlere Blackberry akıllı telefonlarda kullanılmak üzere basit bir uygulama hazırlayacağım. Blackberry 6.0 işletim sistemiyle birlikte  Barcode okuma ile ilgili bir API geliştirildi. Bu API aracılığıyla Blackberry telefonlardan QR veya UTC barcode okutma imkanına sahibiz. Peki öncesinde barcode okutma yapılamıyormuydu ? 
 
Blackberry 6.0 öncesinde barcode okutma için Google'un "ZXing" barcode okutma API'si kullanılıyordu. Bu API Java ile geliştirilmiştir. Aynı zamanda Android için kullanılabilir. Öncelikle barcode okutma uygulamasına geçmeden önce barcode çeşitlerini tanıtalım.
 
QR Barcode Örneği ...
 
 
 
UTC Barcode Örneği ...
 
 
 
Barcode Okuma Uygulaması Hakkında ...
 
Barcode okuma yazılımını geliştirirken basit ve sade bir ekran tasarlayacağım. Ekranda sadece "barcode oku" bir buton ve sonucu yazdıracağım bir adet yazı alanı olacaktır.
 
 !!! Not : Tabi başlamadan önce önemli ve güzel bir detayı vermek lazım. Bu detay için belli bir süre vaktimi almıştı araştırmak ve emin olmak. Blackberry cihazlarda UTC barcode okutmak için telefonunuzu LANDSCAPE modda (yatay)  tutmanız gerekiyor. QR barcode için her iki orientation önemli değil. LANDSCAPE ve PORTRAIT modda da okuma yapabiliyor.
 
Öncelikle Barcode okuma işleminde kritik olan bir Listener tanımlanır. Böylece sürekli bir dinleme sistemiyle barcode okuma olayının gerçekleşip gerçekleşmediği kontrol edilir. Başarılı ise  "barcodeDecoded" adlı metoda düşecektir.
 
Ardından "BarcodeScanner" veritipinde bir nesne yaratılır. Böylece ekranda iken barcode tarama işlemi yapılacaktır.
 
Üçüncü önemli veri tipi ise "BarcodeDecoder" bu sınıf sayesinde ise barcode okuma ile ilgili ayarları yapılabilir. Mesela uygulamada bir çok barcode çeşidini parametre olarak ekleyeceğim.
 
Öncelikle "CustomBarcodeDecoderListener"  sınıfı aşağıdaki gibi projeye dahil edilir.
 
Kaynak kodlar açıklamalarıyla birlikte verilmiştir.
 
package mypackage;

import net.rim.device.api.barcodelib.BarcodeDecoderListener;
import net.rim.device.api.system.Application;
import net.rim.device.api.ui.component.LabelField;

// Barcode okuma için çalıştırılacak olan Listener sınıfı ...
public class CustomBarcodeDecoderListener implements BarcodeDecoderListener {

// Barcode okuma işleminden sonra alınan sonuç _BarcodeResult değişkeninde saklanır.
private String _BarcodeResult = "";
// Barcode okuma işleminden sonra uygulamanın ilk sayfasına dönmek için LastPage
// isminde bir değişken tutulur.
public MyScreen _LastPage;
public LabelField _LabelObj;
// Barcode okuma işlemi bitince bu metoda düşecektir.
public void barcodeDecoded(String rawText) {
        synchronized(Application.getEventLock()){
           _BarcodeResult = rawText;
           _LabelObj.setText(_BarcodeResult);
           MyApp.getUiApplication().
           popScreen(MyApp.getUiApplication().getActiveScreen());
           MyApp.getUiApplication().pushScreen(_LastPage);
        }
    }
}
 
Önemli bir adımı geçtik hazırladığım bu sınıfta barcode okuma işlemi sürekli dinlenecektir. Okuma işlemi gerçekleşince barcode sonucu değişkene atayıp, telefon ekranındaki barcode okuma ekranını kaldırıp, uygulamanın ilk ekranı yansıtılır.
 
Ardından uygulamanın çalışacağı MyScreen adlı sınıfa ait kodlar aşağıdaki gibidir. MyScreen sınıfı bir görsel pencere niteliğindedir. Uygulamanın çalışacağı ekrandır.
 
Öncelikle işlemleri adım adım ayırırsak şöyle bir sıralamada gitmek gerekecektir.
 
1-) Görsel bileşenlerin oluşturulması ve ekranda gösterilmesi
2-) BarcodeScanner için gerekli olan sınıflardan nesne örnekleri oluşturulması
3-) Barcode okutma işlemini başlatacak olan buttona click olayı bağlanması
 
Öncelikle görsel ekranı oluşturan kodlar aşağıdaki gibidir.
 
private void CreateScreen() {
    // Görsel arayüzü oluşturan kodlar.
    _barcodeScanner = new ButtonField("Barcode Okut", ButtonField.FIELD_HCENTER);
    _barcodeResult = new LabelField("** SONUC **", LabelField.FIELD_HCENTER);
    _panel = new VerticalFieldManager(Manager.USE_ALL_WIDTH);
   
    // Yaratılan Button ve Label bileşenleri Vertical olan bir panele eklenir.
    _panel.add(_barcodeScanner);
    _panel.add(_barcodeResult);
    // Doldurulmuş olan panel ekranın içine add metoduyla eklenir.
    add(_panel);
 }
 
Ardından barcode scanner için gerekli olan nesneleri oluşturan metod aşağıdaki gibidir.
 
private void CreateBarcodeScanner() {
   
    // Custom dinleyici sınıfı yaratılır.
    CustomBarcodeDecoderListener _listener = new CustomBarcodeDecoderListener();
    // Barcode okuma işleminden sonra hangi ekrana döneceğini tutan değişken.
    _listener._LastPage = this;
_listener._LabelObj = _barcodeResult; 
   
    // Bir hashtable şeklinde Barcode tipleri eklenir.
    // Böylece uygulama aşağıda eklenmiş olan barcode tiplerinden,
    // biriyle karşılaştığında onu okuyabilecektir.
        Hashtable hints = new Hashtable(1);
        Vector formats  = new Vector(1);
        formats.addElement(BarcodeFormat.UPC_A);
        formats.addElement(BarcodeFormat.EAN_13);
        formats.addElement(BarcodeFormat.EAN_8);
        formats.addElement(BarcodeFormat.QR_CODE);
        formats.addElement(BarcodeFormat.UPC_E);
        formats.addElement(BarcodeFormat.CODE_128);
        formats.addElement(BarcodeFormat.CODE_39);
        formats.addElement(BarcodeFormat.PDF417);
        formats.addElement(BarcodeFormat.ITF);
        hints.put(DecodeHintType.POSSIBLE_FORMATS, formats);

        BarcodeDecoder decoder = new BarcodeDecoder( hints ); 
        try {
       
        //Listener ve Decoder Scanner'a eklenir ve barcode scanner yaratılır.
scanner = new BarcodeScanner(decoder, _listener);
} catch (IOException e) {
e.printStackTrace();
} catch (MediaException e) {
e.printStackTrace();
}
    }
 
Son olarak buttonun click olayının bağlandığı metod aşağıdaki gibidir.
 
private void BindButtonClickEvent() {
    // Butonun click olayında yapılacak olan barcode okuma işlemi başlatılır.
    _barcodeScanner.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
try {
scanner.getVideoControl().setDisplayFullScreen(true);
} catch (MediaException e) {
e.printStackTrace();
}
MainScreen screen = new MainScreen() {
            protected void onUiEngineAttached(boolean attached) {
               super.onUiEngineAttached(attached);
               Ui.getUiEngineInstance().setAcceptableDirections(Display.DIRECTION_LANDSCAPE);
           }
           };
           
           // Barcode okuma ekranı yeni ekran olarak gösterilir.
           screen.add(scanner.getViewfinder());
           // popscreen var olan aktif ekranı kaldırır.
MyApp.getUiApplication().popScreen(MyApp.getUiApplication().getActiveScreen());
           // pushscreen ise gösterilmesi istenilen ekranı koyar.
MyApp.getUiApplication().pushScreen(screen);
           
           try {
scanner.startScan();
} catch (MediaException e) {
e.printStackTrace();
}
}
});
    } 
 
 Sayfanın kurucusu aşağıdaki gibidir.
 
public MyScreen()
{   
    // Sayfanın başlık notu ...
        setTitle("--- Batux Barcode Scanner ---");
        CreateScreen();
        CreateBarcodeScanner();
        BindButtonClickEvent();
} 
 
 
 
Ardından "Run" tuşuna basılır ve uygulama çalıştırılır. Son bir adım olarak bir ayarlama aşağıdaki gibi yapılır.
 

 
Kamera resmi olarak QR veya UTC resmi vermeniz daha mantıklı olacaktır ;) Ardından uygulamayı test sıra geldi.
 
 
 
Barcode okuma uygulamasının sonuna geldik arkadaşlar. Umarım faydalı ve zevkli bir yazı olmuştur sizler için. Bir sonraki makalemde görüşmek dileğiyle ...
 
Batuhan Düzgün
 
Bilgisayar Mühendisi
 
Endüstri Mühendisi 

Currently rated 3.0 by 3 people

  • Currently 3/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

Blackberry

Comments

Add comment


(Will show your Gravatar icon)  

  Country flag

biuquote
  • Comment
  • Preview
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.

Batuhan Düzgün

Sakarya Üniversitesi 

Bilgisayar Mühendisi

Endüstri Mühendisi

Yeditepe Üniversitesi

Bilgisayar Mühendisliği Yüksek Lisans 

 sahibinden.com

   Kıdemli Uzman Yazılım Mühendisi  

E-Mail 

   batuhan.duzgun@sahibinden.com

   batuhan.duzgun@windowslive.com

  github.com/batux

 

Sayfalar

Calendar

<<  November 2018  >>
MoTuWeThFrSaSu
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

Yazıları geniş takvimde göster