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 (http://www.perkon.com.tr/tr-TR/ds2/3/15/753/2904/0/0)
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, geliştirdiğiniz uygulamanın log kaydını alma işlemi muratcelik64 3 327 22-03-2026, Saat: 05:00
Son Yorum: ovural
  Delphi FMX ile geliştirilen projenin yedeğini alma işlemi. muratcelik64 1 184 15-03-2026, Saat: 20:43
Son Yorum: mkysoft
  Android Kontakt, Telefon numaralarını alma.. ARM 1 633 09-03-2025, Saat: 07:00
Son Yorum: ARM
  Lokasyon Alma barissagir 2 939 14-08-2024, Saat: 14:59
Son Yorum: barissagir
  Android WiFi network ismini alma 41linea41 4 1.821 02-10-2023, Saat: 11:57
Son Yorum: 41linea41



Konuyu Okuyanlar: