Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
ZXing Barkod Okuma
#5
(19-05-2021, Saat: 22:00)tmrksmt Adlı Kullanıcıdan Alıntı:
(19-05-2021, Saat: 16:32)eyalin Adlı Kullanıcıdan Alıntı: Merhaba,

ZXing ile barkod okutuyorum.Android telefonda okunan barkodu "showmessage" ile göstermek istiyorum.Ancak mesaj kutusu açılınca arka planda çalışmakta olan kamera
ağırlaşıyor.Benzer durum kamera okuma yaparken başka forma geçiş yapıldığında da oluşuyor. Thread ile alakalı olabileceğini düşünüyorum ancak çözüm bulamadım.Bu konu hakkında tecrübesi olan arkadaşların desteğini rica ediyorum.

Öncelikle sorun yaşadığınızı belirttiğiniz kodları paylaşırsanız çözüm adına daha somut bir netice elde edebilirsiniz...

Benim yıllardır kullandığım ve hiçbir sorun yaşamadığım kodlar şu şekilde;

unit Android.QRCode;
{- Unit Info----------------------------------------------------------------------------
Unit Name  : Android.QRCode
Created By : Barış Atalay 26/02/2014  14:42
Last Change By :

Notes:
----------------------------------------------------------------------------------------}

interface
{$IF DEFINED(ANDROID)}
uses

 System.SysUtils,
 System.Classes,
 System.RTTI,
 FMX.Helpers.Android,
 AndroidAPI.JNI.Net,
 Androidapi.Jni.GraphicsContentViewText,
 Androidapi.JNI.JavaTypes,
 FMX.Platform,
 FMX.Platform.Android,
 AndroidAPI.Helpers;

type

 TCodeModes = (cmPRODUCT_MODE, cmQR_CODE_MODE, cmSCAN_MODE);

 TQRCodeEvent = reference to procedure(const Str: String);
 TQRCode = class
 private
   FClipboardService: IFMXClipboardService;
   FClipboardValue: TValue;
   FZXingCalled: Boolean;
   FOnScan: TQRCodeEvent;
   LFMXApplicationEventService: IFMXApplicationEventService;
   procedure ClipboardSave;
   function HandleAppEventCallBack(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;

   function GetZXingIntent: JIntent;
   procedure ClipboardBack;
 public
   constructor Create;
   destructor Destroy; override;
   procedure Scan(const ACodeMode: TCodeModes; CallBack: TQRCodeEvent);
   property Scanning: Boolean read FZXingCalled write FZXingCalled;
 end;

const
 CodeModes: array[TCodeModes] of string = ('PRODUCT_MODE', 'QR_CODE_MODE', 'SCAN_MODE');
{$endif}

implementation

{$IF DEFINED(ANDROID)}
{ TQRCode }

procedure TQRCode.Scan(const ACodeMode: TCodeModes; CallBack: TQRCodeEvent);
var
 LIntent: JIntent;
begin
 FOnScan := CallBack;
 ClipboardSave;
 FClipboardService.SetClipboard('');
 LIntent := GetZXingIntent();
 LIntent.putExtra(StringToJString('SCAN_MODE'), StringToJString(CodeModes[ACodeMode]));
 SharedActivity.startActivityForResult(LIntent, 0);
 FZXingCalled := True;
end;

procedure TQRCode.ClipboardSave;
begin
 FClipboardValue := FClipboardService.GetClipboard;
end;

constructor TQRCode.Create;
begin
 if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(LFMXApplicationEventService)) then
    LFMXApplicationEventService.SetApplicationEventHandler(HandleAppEventCallBack);

 TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService,
      IInterface(FClipboardService));
end;

destructor TQRCode.Destroy;
begin
 inherited;
end;

function TQRCode.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 TQRCode.HandleAppEventCallBack(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
var
 LResult: string;
begin
 if FZXingCalled and (AAppEvent = TApplicationEvent.aeBecameActive) then
 begin
   LResult := FClipboardService.GetClipboard.ToString;
   if not LResult.IsEmpty and Assigned(FOnScan) then
   begin
      FOnScan(LResult);
      FOnScan := Nil;
   end;
   ClipboardBack;
   FZXingCalled := False;
 end;
 Result := True;
end;

procedure TQRCode.ClipboardBack;
begin
 FClipboardService.SetClipboard(FClipboardValue);
end;

{$ENDIF}

end.


Okutmak için Button'un OnClick'ine;

procedure TForm1.SpeedButton44Click(Sender: TObject); // Barkod Okut !!!


begin
{$IF DEFINED(iOS) or DEFINED(ANDROID)}
//İlk gönderilen parametre hangi Tür kod okutacağınızdır. Seçenekler:
//cmPRODUCT_MODE, cmQR_CODE_MODE, cmSCAN_MODE

 QRCodeScanner.Scan(cmPRODUCT_MODE, procedure(const Str: String)
 begin
   TThread.Synchronize(TThread.CurrentThread, procedure
   begin
     Edit16.Text := Str;

   end);
 end);

 {$ENDIF}

end;

Hocam kod için teşekkür ederim....

herşey normal ancak 
  Edit16.Text := Str; ile str boş geliyor..
ancak Debug modda str değeri geliyor
Cevapla


Bu Konudaki Yorumlar
ZXing Barkod Okuma - Yazar: eyalin - 19-05-2021, Saat: 16:32
Cvp: ZXing Barkod Okuma - Yazar: tmrksmt - 19-05-2021, Saat: 22:00
Cvp: ZXing Barkod Okuma - Yazar: eyalin - 22-05-2021, Saat: 12:16
Cvp: ZXing Barkod Okuma - Yazar: ikurt07 - 12-06-2021, Saat: 12:47
ZXing Barkod Okuma - Yazar: eyalin - 11-06-2021, Saat: 13:58

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
Lightbulb QR okuma ve oluşturma [Anlatım] Mr.Developer 27 20.104 15-02-2026, Saat: 21:57
Son Yorum: enigma
  Android El Terminali Barkod Okuyucu Verisi tuna 0 334 17-10-2025, Saat: 01:07
Son Yorum: tuna
  Yeni kimlik kartı NFC ile TCKN okuma otonomi 5 20.128 01-06-2025, Saat: 09:32
Son Yorum: mrmarman
  FMX Android Barkod Scanner - [ÇÖZÜLDÜ] Mesut 21 7.198 20-12-2023, Saat: 21:46
Son Yorum: Jakarta2
  elterminali üzerinde androidde barkod uygulaması için action butonu yakalamak miralaymir 7 2.990 13-10-2023, Saat: 14:44
Son Yorum: miralaymir



Konuyu Okuyanlar: 1 Ziyaretçi