A
A
Alexey Samoilov2020-09-04 22:24:51
Android
Alexey Samoilov, 2020-09-04 22:24:51

How to use Android SDK in Delphi program?

I created a wrapper for the SDK package that came with Android Terminal. I need the print functionality from this package.
In the project, everything compiles fine, but when you try to call classes from the wrapper, an error is generated that the class is not initialized.

part of the wrapper code:
type
  Jsdk_DriverManager = interface;//com.zcs.sdk.DriverManager
  JLed = interface;//com.zcs.sdk.Led
  JLedLightModeEnum = interface;//com.zcs.sdk.LedLightModeEnum
  Jsdk_Printer = interface;//com.zcs.sdk.Printer
  JSdkData = interface;//com.zcs.sdk.SdkData
  JSdkResult = interface;//com.zcs.sdk.SdkResult


  Jsdk_DriverManagerClass = interface(JObjectClass)
    ['{4A7F5734-E16B-4134-9AA9-FC299B1196B0}']
    {class} function getInstance: Jsdk_DriverManager; cdecl;
    {class} function init: Jsdk_DriverManager; cdecl;
  end;

  [JavaSignature('com/zcs/sdk/DriverManager')]
  Jsdk_DriverManager = interface(JObject)
    ['{0279E67B-31DA-4375-B96C-A675297818B7}']
    function getBaseSysDevice: JSys; cdecl;
    function getBeeper: JBeeper; cdecl;
    function getBluetoothHandler: JBluetoothHandler; cdecl;
    function getCardReadManager: JCardReaderManager; cdecl;
    function getExternalCardManager: JExternalCardManager; cdecl;
    function getFingerprintManager: Jfingerprint_FingerprintManager; cdecl;
    function getLedDriver: JLed; cdecl;
    function getPadManager: JPinPadManager; cdecl;
    function getPrinter: Jsdk_Printer; cdecl;
    function getSingleThreadExecutor: JExecutorService; cdecl;
    function getUart: JUart; cdecl;
    procedure setJni(smartPosJni: JSmartPosJni); cdecl;
  end;
  TJsdk_DriverManager = class(TJavaGenericImport<Jsdk_DriverManagerClass, Jsdk_DriverManager>) end;

  JLedClass = interface(JObjectClass)
    ['{355BFEF1-7B0C-4F57-8B6E-1CD621CC39B4}']
  end;

  [JavaSignature('com/zcs/sdk/Led')]
  JLed = interface(JObject)
    ['{FD89DF57-465D-433D-8575-9EC5E53F16DD}']
    function setLed(ledLightModeEnum: JLedLightModeEnum; b: Boolean): Integer; cdecl;
  end;
  TJLed = class(TJavaGenericImport<JLedClass, JLed>) end;

  JLedLightModeEnumClass = interface(JEnumClass)
    ['{0E610D53-7E7B-42DE-8933-4F5960A9A4AE}']
    {class} function _GetALL: JLedLightModeEnum; cdecl;
    {class} function _GetBLUE: JLedLightModeEnum; cdecl;
    {class} function _GetGREEN: JLedLightModeEnum; cdecl;
    {class} function _GetRED: JLedLightModeEnum; cdecl;
    {class} function _GetYELLOW: JLedLightModeEnum; cdecl;
    {class} function valueOf(string_: JString): JLedLightModeEnum; cdecl;
    {class} function values: TJavaObjectArray<JLedLightModeEnum>; cdecl;
    {class} property ALL: JLedLightModeEnum read _GetALL;
    {class} property BLUE: JLedLightModeEnum read _GetBLUE;
    {class} property GREEN: JLedLightModeEnum read _GetGREEN;
    {class} property RED: JLedLightModeEnum read _GetRED;
    {class} property YELLOW: JLedLightModeEnum read _GetYELLOW;
  end;

  Jsdk_PrinterClass = interface(JObjectClass)
    ['{16A78F6B-6B42-4290-8577-62D0FB1511A3}']
    {class} function createQRCode(string_: JString; i: Integer; i1: Integer): JBitmap; cdecl; overload;
    {class} function sysCopy(list: JList): TJavaArray<Byte>; cdecl;
  end;

  [JavaSignature('com/zcs/sdk/Printer')]
  Jsdk_Printer = interface(JObject)
    ['{C8CAA496-4806-4B2C-BE6A-BE8A735ADBCD}']
    function coverAllBitmap(i: Integer; i1: Integer): JBitmap; cdecl;
    //function createBarcode(context: JContext; string_: JString; i: Integer; i1: Integer; b: Boolean; alignment: JLayout_Alignment; barcodeFormat: JBarcodeFormat; i2: Integer): JBitmap; cdecl;
    function createQRCode(string_: JString; i: Integer; i1: Integer; alignment: JLayout_Alignment; i2: Integer): JBitmap; cdecl; overload;
    function getPrinterStatus: Integer; cdecl;
    function labelPrintBackFeed: Integer; cdecl; overload;
    function labelPrintBackFeed(i: Integer): Integer; cdecl; overload;
    function labelPrintForwardFeed: Integer; cdecl; overload;
    function labelPrintForwardFeed(i: Integer): Integer; cdecl; overload;
    function labelPrintLocationFeed: Integer; cdecl;
    function setLabelPrintStart: Integer; cdecl; overload;
    function setLabelPrintStart(i: Integer; i1: Integer): Integer; cdecl; overload;
    //procedure setPrintAppendBarCode(context: JContext; string_: JString; i: Integer; i1: Integer; b: Boolean; alignment: JLayout_Alignment; barcodeFormat: JBarcodeFormat); cdecl; overload;
    //procedure setPrintAppendBarCode(context: JContext; string_: JString; i: Integer; i1: Integer; b: Boolean; alignment: JLayout_Alignment; barcodeFormat: JBarcodeFormat; i2: Integer); cdecl; overload;
    procedure setPrintAppendBitmap(bitmap: JBitmap; alignment: JLayout_Alignment); cdecl; overload;
    procedure setPrintAppendBitmap(bitmap: JBitmap; alignment: JLayout_Alignment; i: Integer); cdecl; overload;
    procedure setPrintAppendQRCode(string_: JString; i: Integer; i1: Integer; alignment: JLayout_Alignment); cdecl; overload;
    procedure setPrintAppendQRCode(string_: JString; i: Integer; i1: Integer; alignment: JLayout_Alignment; i2: Integer); cdecl; overload;
    procedure setPrintAppendString(string_: JString; prnStrFormat: JPrnStrFormat); cdecl; overload;
    procedure setPrintAppendString(string_: JString; prnStrFormat: JPrnStrFormat; i: Integer); cdecl; overload;
    function setPrintLine(i: Integer): Integer; cdecl;
    function setPrintStart: Integer; cdecl; overload;
    function setPrintStart(i: Integer): Integer; cdecl; overload;
  end;
  TJsdk_Printer = class(TJavaGenericImport<Jsdk_PrinterClass, Jsdk_Printer>) end;


device access:
var
  Man : Jsdk_DriverManager;
  Printer : Jsdk_Printer;
  prnStrFormat: JPrnStrFormat;
  Res : JSdkResult;

  LedUNum : JLedLightModeEnum;
  Led : JLed;
  paperWidth, paperHeight,
  i : Integer;

begin

  paperWidth :=  360;
  paperHeight := 240;

  Res := TJSdkResult.Create;
  Man := TJsdk_DriverManager.Create;   //Мереджер устройств

  Led := TJLed.Create;
  Led := Man.getLedDriver; //Управление светодиодами
  LedUNum := TJLedLightModeEnum.Create;
  i  := LedUNum.getClor;
  Memo1.Lines.Add('getClor ='+IntToStr(i));
  i  := Led.setLed(LLL.ALL,true);  // Сдесь ошибка при передачи параметра
  Memo1.Lines.Add('setLed ='+IntToStr(i));

    Printer := TJsdk_Printer.Create;
    Printer := Man.getPrinter();

  prnStrFormat := TJPrnStrFormat.Create;
  i := prnStrFormat.getTextSize;
  Memo1.Lines.Add('getTextSize ='+IntToStr(i));

  i := Printer.getPrinterStatus;
  Memo1.Lines.Add('getPrinterStatus ='+IntToStr(i));
  Printer.setPrintAppendString(StringToJString('qwertyyuiasdfhjfgdAFDSVDSZ'),prnStrFormat);

//  i := Printer.setLabelPrintStart(360,240{paperWidth, paperHeight});
//  Memo1.Lines.Add('setLabelPrintStart ='+IntToStr(i));

  i := Printer.setPrintStart;
  Memo1.Lines.Add('setPrintStart ='+IntToStr(i));

Runtime error due to incorrect initialization of these classes.

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question