HMS Scan Kit ile Barkod İşlemleri

Murat YÜKSEKTEPE
Huawei Developers - Türkiye
3 min readAug 17, 2020

Nedir?

HMS Scan Kit uygulamalarınızın içinde barkod tarama ve oluşturma işlevlerini üstlenen bir servistir.

Özellikleri

13 Farklı Barkod Formatını Destekler

QR Code, Data Matrix, PDF417, Aztec, EAN-8, EAN-13, UPC-A, UPC-E, Codabar, Code 39, Code 93, Code 128 ve ITF.

Gelişmiş Tanımlama

Hasar görmüş, az veya bulanık görünebilen, düşük ya da yüksek ışıklı alanlardaki barkodları okuyabilir.

Otomatik Yakınlaştırma

Küçük veya uzak mesafade bulunan barkodlar için otomatik yakınlaştırma özelliği mevcuttur.

Çoklu Tanımlama

Aynı anda 5 barkoda kadar eşzamanlı olarak tanımlayabilir.

Yapılandırılmış Veri İşleme

Barkod içine işlenmiş verilere göre hızlıca işlem yapabilirsiniz. Örneğin barkodu okutup Wi-Fi bağlantısı kurabilir, telefon rehberine kişi ekleyebilir ya da takvim içine bir olayı kayıt ettirebilirsiniz.

QR Kod Oluşturma

Verilerinizi en uygun ve en hızlı şekilde qr kodlara dönüştürebilirsiniz.

Geliştirme Süreci

Her HMS Kit’ini kullanmak için yapılması gereken ilk işlemler Huawei Console’a kayıt olmak ve proje oluşturmaktır. Daha sonra oluşturduğunuz projenin ayarlarına girerek kullanmak istediğiniz kitleri aktif hale getirmeli ve uygulamanızın debug parmak izini ilgili alana girmelisiniz. Detaylar için lütfen bu dokümanı inceleyin;

Android geliştirme kısmıyla devam edelim;

Öncelikle HMS Scan Kit’i uygulamanıza dahil etmeniz gerekiyor. Bunun için build.gradle dosyanızdaki dependencies içerisine aşağıdaki kodu eklemelisiniz;

implementation ‘com.huawei.hms:scan:1.2.1.300’

Normalde android uygulamanız bütün dilleri destekleyecek şekilde otomatik olarak ayarlanmış durumdadır eğer siz sadece belirli dillere destek verecek şekilde bir değişiklik yaptıysanız build.gradle dosyanız içersinde ki android > defaultConfig alanına resConfig satırını aşağıdaki gibi eklemelisiniz;

android {
defaultConfig {

resConfigs "en", "zh-rCN", "Other languages supported by your app"
}
}

Uygulama İçi İzinlerin Tanımlanması

Kamera üzerinden barkod okutma işlemi yapabilmek için uygulamaız içerisinde kamera iznini tanımlamış olamamız gerekiyor. Bunun için AndroidManifest.xml dosyamızı açalım ve şu satırları ekleyelim;

<uses-permission android:name="android.permission.CAMERA" />

Ayrıca kamerayı daha verimli kullanabilmek için şu satırları da eklememiz bizim faydamıza olacaktır;

<uses-feature android:name="android.hardware.camera" /><uses-feature android:name="android.hardware.camera.autofocus" />

Eğer barkod okutma işlemini kullanıcı telefonun dahili belleğindeki bir görsel ile yapmak isterse dahili belleğe ulaşabilmek için olan izni de uygulamamıza dahil etmemiz gerekecek;

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Activity’miz İçin Bazı Gerekli Tanımlar

private static final int CAMERA_REQ_CODE = 1111;
private static final int REQUEST_CODE_SCAN_ONE = 1112;

Bu tanımlamalar ile onActivtyResult methoduna geri dönen verilerin nerelerden gönderildiğini takip edebileceğiz.

İzinlerin Kullanıcı Tarafından Onaylanması

AndroidManifest.xml dosyasında tanımladığımız izinler tek başına yeterli olamayacaktır, kullanıcı tarafından da onaylanması gerekmektedir. Bunun için önce kullanıcıya bir uyarı penceresi göstermemiz gerekiyor. Activity’iniz içerisinde uygun bir yerde şu kodu kullanarak bu işlemi basitçe yapabilirsiniz.

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}, CAMERA_REQ_CODE);

Daha sonra ise kullanıcının bu isteklere izin verip vermediğini kontrol ettirmemiz ve bunun sonucuna göre işlemlere başlamamız ya da yeniden izin pencerelerini göstermemiz gerekiyor. Kullanıcının izin pencelerine karşı verdiği cevapları takip edebilmek için onRequestPermissionsResult fonksiyonunu çağırmalı ve sonucu takip etmeliyiz, bu işlem için şu kod blogunu kullanabilirsiniz;

@Overridepublic void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {if (requestCode == CAMERA_REQ_CODE && grantResults.length == 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {    // İzinler verildi
// Barkod okutma işlemini tetikletebiliriz

}
}

Varsayılan Barkod Okuma Görünümü

Öncelikle barkod tarama işlemlerini özelleştirebildiğimiz bir ayar nesnesi oluşturmamız gerekiyor. Örneğin uygulamamızın sadece QRCODE ve DATAMATRIX tipindeki barkodları okumasını sağlayacak şekilde ayarlayalım;

HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.QRCODE_SCAN_TYPE , HmsScan.DATAMATRIX_SCAN_TYPE).create();

Barkod takibi yapacak ekranın açılmasını sağlayalım;

ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, options);

Eğer bir barkod algılanırsa bu veri onActivityResult methoduna iletilecektir bu yüzden onAcvitityResult içerisine gelen verileri dinlemeli ve bizim 1112 kodu ile gönderdiğimiz barkod tarama işleminden gelip-gelmediğini kontrol ettmeliyiz. Eğer gelen veri bir barkod verisi ise artık onu alıp işleyebiliriz demektir.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != RESULT_OK || data == null) {
return;
}
if (requestCode == REQUEST_CODE_SCAN_ONE) {
HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);
if (obj != null) {
Log.d("Barkod Verisi: " + obj);
}
}
}

Kaynaklar;

--

--