Merhaba arkadaşlar bu yazımızda Zxing kütüphanesi kullanılarak basit bir QR Kod okuyucusu yapacağız.
Ekran görüntüsü yukarıda ki gibi olacak. Kodlara geçmeden, build.gradle dosyasına bir kaç ekleme yapmamız gerecek. Dependencies kısmına
compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar' compile 'com.google.zxing:core:3.2.1'
şeklinde gerekli kütüphaneyi ekliyoruz.
Daha sonra manifests dosyasına izinimizi ekliyoruz;
<uses-permission android:name="android.permission.CAMERA"/>
Şimdi kodlara geçersek;
private Button button; private TextView text_qr_code_sonuc,txt_sonuc,txt_code_kind,txt_qr_code_kind_result;
ilk kısımda tasarımda eklediklerimizi kodda tanımlıyoruz. Daha sonra ;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final Activity activity = this; button = (Button) findViewById(R.id.button); txt_sonuc = (TextView) findViewById(R.id.txt_sonuc); text_qr_code_sonuc = (TextView) findViewById(R.id.qr_code_sonucu); txt_code_kind = (TextView) findViewById(R.id.txt_code_kind); txt_qr_code_kind_result = (TextView) findViewById(R.id.txt_qr_code_kind_result); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //Bu activity içinde çalıştırıyoruz. IntentIntegrator integrator = new IntentIntegrator(activity); //Kütüphanede bir kaç kod tipi var biz hepsini tarayacak şekilde çalıştırdık. //integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES); //şeklindede sadece qr code taratabilirsiniz. integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES); //Kamera açıldığında aşağıda yazı gösterecek integrator.setPrompt("Scan"); //telefonun kendi kamerasını kullandırıcaz integrator.setCameraId(0); //okuduğunda 'beep' sesi çıkarır integrator.setBeepEnabled(true); //okunan barkodun image dosyasını kaydediyor integrator.setBarcodeImageEnabled(false); //scan başlatılıyor integrator.initiateScan(); } }); }
Bu kısıma kadar yaptıklarımız bize kamerayı açtırıp kodu taratmamıza yarayacak fakat dönen cevabı değerlendirmemiz gerekli. Bunun içinde onCreate metodunun bitimine aşağıdaki kısmı yazıyoruz;
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { //Kütüphane okuduktan sonra bu metodla bize result döndürüyor. IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if(result != null) { if(result.getContents() == null) { text_qr_code_sonuc.setText("Kod Sonucu:"); txt_sonuc.setText("Qr Code Bulunamadı."); txt_code_kind.setText("Kod Türü:"); txt_qr_code_kind_result.setText("Bulunamadı."); } else { Log.d("MainActivity", "Scanned"); text_qr_code_sonuc.setText("Kod Sonucu:"); txt_sonuc.setText(result.getContents()); txt_code_kind.setText("Kod Türü:"); txt_qr_code_kind_result.setText(result.getFormatName()); } } }
Sonucu değerlendirmek size kalmış. Ben basit şekilde yapılacakları göstermeye çalıştım. Umarım beğenirsiniz. Uygulamayı buradan indirebilirsiniz.
Textview nesnelerine atama yapılan if bloğunda hata var, ya if içindekiler else kısmında olması lazım ya da != değil de == olması lazım. Onun haricinde onCreate içinde Activity değişkenini tanımlamaya gerek yok, IntentIntegrator new’leme işleminde MainActiviy.this ya da mevcut olan activiy isminde gönderilebilir.
Onun haricinde döküman için teşekkür ederim. İnternetteki tek karışık olmayan makale ve satır satır kodların ne işe yaradığı da belirtilerek anlama ve öğrenme kısmında büyük yardımı dokundu. Teşekkür ederim…
BeğenBeğen
Şimdi fark ettim, if bloğunda getContents kontrolü de varmış. İf bloğunda sıkıntı yok.
BeğenBeğen
Elinize-emeğinize sağlık. Teşekkürler.
BeğenBeğen