Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
PDA el terminalinde okunan barkodu alma
#1
Arkadaslar merhaba,

Perkon'un uzerinde kendi barkod tarayicisi olan DS2 el terminaline barkod okutmak istiyorum (Linkleri Görebilmeniz İçin Üye Olmanız Gerekiyor. Üye Olabilmek İçin Lütfen Buraya Tıklayınız.)
aciklamalarda

data receive method : INDENT_EVENT
Action name : app.dsic.barcodetray.BARCODE_BR_DECODING_DATA


denmis. Ben de düz mantikla Delphi 10.2 Tokyo örnekleri icindeki "receive indent" uygulamasinda

MainActivity.registerIntentAction(TJIntent.JavaClass.ACTION_VIEW);

satirini

MainActivity.registerIntentAction(StringtojString('app.dsic.barcodetray.BARCODE_BR_DECODING_DATA'));

olarak degistirdim ve AndroidManifest.template.xml dosyasi icinde ACTION_VIEW ile ilgili olan indent-filter tagi icini 

<action android:name="app.dsic.barcodetray.BARCODE_BR_DECODING_DATA" />

olarak degistirdim...
Ve tabi ki de çalismiyor Big Grin  hayat bu kadar kolay olsaydi keske... 2 gündür googella, forumlari tirmala ihhh, kimse gercek bir barkod okuyucu ile barkod okutmaya caslismamis yada yapmis da deneyimini paylasmamis, Her taraf Xing ornekleri ile dolu.

Şu intenti bir ele gecirsem, daha başlangicta takilip kaldim. Varsa bir yardim lutfen..

Alet barkod okuduktan sonra bir broadcast yayinliyor. Burada gonderdigi intent icindeki action name " app.dsic.barcodetray.BARCODE_BR_DECODING_DATA".
Benim bunu bir sekilde form icinde yakalayabilmem lazim. cihazin kendi orneginde java ile Broadcastreceiver fonksiyonu yazmis ve bu fonksiyonu asagidaki satirla kayit etmis.

registerReceiver(mBarcodeReadBroadCast , new IntentFilter("app.dsic.barcodetray.BARCODE_BR_DECODING_DATA"));

Delphi intent ornegindeki HandleActivityMessage proseduru muhtemelen ayni amacla calisiyor. Programi debug modda adim adim calistiryorum, FormCreate den sonra diger prosedurlerin icine baslangicta bir kac kez dusuyor ama daha sonra barkod okuttugumda hic bir break-point de yakalanmiyor. yani proses formun icinde düşmüyor.

Ilgili kodun tamamini asagiya kopyalasam sanırım ilgilenmek isteyeceklere hem daha fazla ip ucu verecek hem de ornegi aratmamis olacagim:

unit Unit1;

interface

uses
 System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, System.Messaging, FMX.Platform,
 FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, Androidapi.JNI.GraphicsContentViewText,
 FMX.Controls.Presentation, FMX.StdCtrls, FMX.Layouts, FMX.WebBrowser, FMX.Objects, FMX.ScrollBox, FMX.Memo;

type
 TForm1 = class(TForm)
   ToolBar1: TToolBar;
   Layout1: TLayout;
   Memo1: TMemo;
   Label1: TLabel;
   procedure FormCreate(Sender: TObject);
 private
   { Private declarations }
   function HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
   procedure HandleActivityMessage(const Sender: TObject; const M: TMessage);
   function HandleIntentAction(const Data: JIntent): Boolean;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.fmx}

uses FMX.Platform.Android, Androidapi.JNI.JavaTypes, Androidapi.JNI.Net, Androidapi.JNI.Os, Androidapi.Helpers;

procedure TForm1.FormCreate(Sender: TObject);
var
 AppEventService: IFMXApplicationEventService;
begin

 if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, AppEventService) then
   AppEventService.SetApplicationEventHandler(HandleAppEvent);

 // Register the type of intent action that we want to be able to receive.
 // Note: A corresponding <action> tag must also exist in the <intent-filter> section of AndroidManifest.template.xml.

//  MainActivity.registerIntentAction(TJIntent.JavaClass.ACTION_VIEW);

 MainActivity.registerIntentAction(StringtojString('app.dsic.barcodetray.BARCODE_BR_DECODING_DATA'));

 TMessageManager.DefaultManager.SubscribeToMessage(TMessageReceivedNotification, HandleActivityMessage);
end;

procedure TForm1.HandleActivityMessage(const Sender: TObject; const M: TMessage);
begin
 if M is TMessageReceivedNotification then
   HandleIntentAction(TMessageReceivedNotification(M).Value);
end;

function TForm1.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
var
 StartupIntent: JIntent;
begin
 Result := False;
 if AAppEvent = TApplicationEvent.BecameActive then
 begin
   StartupIntent := MainActivity.getIntent;
   if StartupIntent <> nil then
     HandleIntentAction(StartupIntent);
 end;
end;

function TForm1.HandleIntentAction(const Data: JIntent): Boolean;
var
 Extras: JBundle;
begin
 Result := False;
 if Data <> nil then
 begin
   Memo1.ClearContent;
   Extras := Data.getExtras;
   if Extras <> nil then
     Memo1.Text := JStringToString(Extras.getString(TJIntent.JavaClass.EXTRA_TEXT));
   Invalidate;
 end;
end;

end.
Cevapla
#2
Arkadaslar asagidaki broadcastreceiver ile soruma cevap buldum. Yine de yukaridaki kodun neden calismadigina ya da ne eklenir/cikartilirsa calisabilecegine dair bir cevap varsa kodu geliştirmek adına bilmek isterim.

tesekkurler, cem

unit BroadcastReceiverU;

interface

uses
 Androidapi.JNIBridge, Androidapi.JNI.Embarcadero, Androidapi.JNI.GraphicsContentViewText;

type
 TMyReceiver = class(TJavaLocal, JFMXBroadcastReceiverListener)
 public
   procedure onReceive(context: JContext; intent: JIntent); cdecl;
 end;

implementation

uses
 Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNI.Widget;

procedure TMyReceiver.onReceive(context: JContext; intent: JIntent);
var
BarcodeText: string;
begin
   BarcodeText := JStringToString(intent.getStringExtra(StringToJString('EXTRA_BARCODE_DECODED_DATA')));
end;

end.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi fmx ile Play store uygulama içi satın alma işlemi crowlin 2 183 27-09-2019, Saat: 23:07
Son Yorum: crowlin
  IOS Sim Kart Bilgilerini Alma mcuyan 19 1.420 24-12-2018, Saat: 19:23
Son Yorum: nguzeller
  Android'de bluetooth kullanarak termal yazicidan cikti alma arsl01 6 926 10-11-2018, Saat: 13:35
Son Yorum: arsl01
  ekran görüntüsü alma sorunu ? Mr.Developer 7 1.174 07-11-2018, Saat: 14:58
Son Yorum: Mr.Developer
  Uygulama içi satın alma ? Mr.Developer 0 437 19-10-2018, Saat: 19:51
Son Yorum: Mr.Developer



Konuyu Okuyanlar: 1 Ziyaretçi