Merhabalar,
Bu yazımda sizlere XE5 Android QR Code Okuma'dan bahsedeceğim ve tabiki siz isterseniz sadece QR yerine normal barcode bile okuyabilirsiniz size kalmış sadece göndereceğiniz parametre ile alakalı. Bu olay için kendime bir .pas dosyası hazırlamıştım, konu hiçbir şekilde bi yerden alıntı değildir. Lafı uzatmadan kodlarımıza geçelim. Hazırladığım .pas dosyasını buradan indirebilirsiniz!. Aşağıdaki kod parçalarını gerekli yerlere yazarsanız tam teşekkürlü bir Qr Code okucusunu XE5 üzerinden kullanmış olacaksınız. Ek olarak XE5'de Qr veya Barcode okumak için ZXing Barcode Scanner programının cihazınızda yüklü olması gerekmektedir. Programın linki.
Aşağıdaki QR Codu okutabilirsiniz.
Uses Android.QRCode ,FMX.Platform.Android ,FMX.Helpers.Android ,AndroidApi.JNI.GraphicsContentViewText ,AndroidApi.JNI.JavaTypes ,Androidapi.JNI.Net; //Form Var QRCodeScanner: TQRCode; //FormCreate QRCodeScanner := TQRCode.Create; ZxingControl; //FormDestroy QRCodeScanner.Free; //Scan Button - Tara Butonu var Intent: jIntent; begin //İlk gönderilen parametre hangi Tür kod okutacağınızdır. Seçenekler: //cmPRODUCT_MODE, cmQR_CODE_MODE, cmSCAN_MODE QRCodeScanner.Scan(cmQR_CODE_MODE, procedure(const Str: String) begin TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Text := Str; end); end);Ek olarak yazacağınız program için cihazda ZXing Barcode Scanner programının var olup olmadığını kendi kullandığım bir procedure ile kontrol etmiştim onuda sizler ile paylaşıyorum.
procedure ZxingControl; function GetZXingIntent: JIntent; const GOOGLE_ZXING = 'com.google.zxing.client.android.SCAN'; GOOGLE_ZXING_PACKAGE = 'com.google.zxing.client.android'; begin Result := TJIntent.JavaClass.init(StringToJString(GOOGLE_ZXING)); Result.setPackage(StringToJString(GOOGLE_ZXING_PACKAGE)); end; function IsIntentCallable(const AIntent: JIntent): Boolean; var LJPackageManager: JPackageManager; begin Result := False; if Assigned(AIntent) then begin LJPackageManager := SharedActivityContext.getPackageManager; Result := LJPackageManager.queryIntentActivities(AIntent, TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY).size <> 0; end; end; procedure OpenURL(const AURL: string); var LIntent: JIntent; begin LIntent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, TJnet_Uri.JavaClass.parse(StringToJString(AURL))); MainActivity.startActivity(LIntent); end; Var LIsZXingCallable: Boolean; begin //ANA BEGİN LIsZXingCallable := IsIntentCallable(GetZXingIntent); if not LIsZXingCallable then begin MessageDlg('Cihazda ZXing bulunamadı lütfen yükleyiniz!',TMsgDlgType.mtError,[TMsgDlgBtn.mbOK] , 0); OpenURL('https://play.google.com/store/apps/details?id=com.google.zxing.client.android&hl=tr'); MainActivity.finish(); end; end;
Teşekkürler.
YanıtlaSilTeşekkürler.
YanıtlaSilHer seferde butona basıp bir okuma yerine, seri okuma yapılabilir mi?
Murat