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
satirini
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
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:
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
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.

