Перейти к содержанию
Fire Monkey от А до Я

destroyer86

Пользователи
  • Постов

    6
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные destroyer86

  1. JavaWrapper.zip

    uses
      FMX.Dialogs,
      System.DateUtils,
      System.SysUtils,
      System.Types,
      Androidapi.JNIBridge,
      Androidapi.JNI.GraphicsContentViewText,
      Androidapi.JNI.JavaTypes,
      Androidapi.JNI.Os,
      Androidapi.Helpers,
      Androidapi.JNI.App,
      Androidapi.Jni,
      JavaInterfaces,
    
    var
        FUSBManager : JUsbManager;
        FProber     : JUsbSerialProber;
        FDriver     : JUsbSerialDriver;
        FConnection : JUsbDeviceConnection;
        FPort       : JUsbSerialPort;
        FList       : JList;
    	LastErrMsg  : string;
    
    function USBPortOpen: Boolean;
    begin
      try
        FUSBManager := TJUsbManager.Wrap(TAndroidHelper.Activity.getSystemService(TJContext.JavaClass.USB_SERVICE));
        FProber := TJUsbSerialProber.JavaClass.getDefaultProber;
        FList := FProber.findAllDrivers(FUSBManager);
    
        if FList.isEmpty then
          Exit(False);
    
        FDriver := TJUsbSerialDriver.Wrap(FList.get(0));
        FConnection := FUSBManager.openDevice(FDriver.getDevice);
    
        if not Assigned(FConnection) then
        begin
          Exit(False);
        end;
    
        FPort := TJUsbSerialPort.Wrap(FDriver.getPorts.get(0));
        FPort.open(FConnection);
        FPort.setParameters(ChannelSettings.Speed, ChannelSettings.Bits, ChannelSettings.StopBits, ChannelSettings.Parity);
        Exit(True);
      except
        on E: Exception do
        begin
          LastErrMsg := E.ClassName + ' поднята ошибка, с сообщением : ' + E.Message;
        end;
      end;
    
      Result := False;
    end;
    
    function UsbWrite(): Boolean;
    var
    	arr: TJavaArray<Byte>;	
        Count: Intger;  
    begin
          arr := TJavaArray<System.Byte>.Create(Length(BufIn));
          Count := FPort.Write(arr, TimeOut);
          Result := (Count > 0)
    end;
    
    function UsbRead(): Boolean;
    var
    	arr: TJavaArray<Byte>;
        Count: Intger; 
    begin
          arr := TJavaArray<System.Byte>.Create(Length(BufIn));
          Count := FPort.read(arr, TimeOut);
          Result := (Count > 0)
    end;

     

  2. Всем привет, с помощью Java2Op сделал обертку библиотеки получил модуль с интерфейсами.

    Теперь сам вопрос в JavaInterfaces.pas есть описание:

     

      JUsbManagerClass = interface(JObjectClass)
        ['{1048A6E9-E1B5-4DA5-A168-ED91E8DE5284}']
        {class} function _GetACTION_USB_ACCESSORY_ATTACHED: JString; cdecl;
        {class} function _GetACTION_USB_ACCESSORY_DETACHED: JString; cdecl;
        {class} function _GetACTION_USB_DEVICE_ATTACHED: JString; cdecl;
        {class} function _GetACTION_USB_DEVICE_DETACHED: JString; cdecl;
        {class} function _GetEXTRA_ACCESSORY: JString; cdecl;
        {class} function _GetEXTRA_DEVICE: JString; cdecl;
        {class} function _GetEXTRA_PERMISSION_GRANTED: JString; cdecl;
        {class} function getAccessoryList: TJavaObjectArray<JUsbAccessory>; cdecl;//Deprecated
        {class} function openAccessory(accessory: JUsbAccessory): JParcelFileDescriptor; cdecl;//Deprecated
        {class} function openDevice(device: JUsbDevice): JUsbDeviceConnection; cdecl;//Deprecated
        {class} procedure requestPermission(device: JUsbDevice; pi: JPendingIntent); cdecl; overload;//Deprecated
        {class} property ACTION_USB_ACCESSORY_ATTACHED: JString read _GetACTION_USB_ACCESSORY_ATTACHED;
        {class} property ACTION_USB_ACCESSORY_DETACHED: JString read _GetACTION_USB_ACCESSORY_DETACHED;
        {class} property ACTION_USB_DEVICE_ATTACHED: JString read _GetACTION_USB_DEVICE_ATTACHED;
        {class} property ACTION_USB_DEVICE_DETACHED: JString read _GetACTION_USB_DEVICE_DETACHED;
        {class} property EXTRA_ACCESSORY: JString read _GetEXTRA_ACCESSORY;
        {class} property EXTRA_DEVICE: JString read _GetEXTRA_DEVICE;
        {class} property EXTRA_PERMISSION_GRANTED: JString read _GetEXTRA_PERMISSION_GRANTED;
      end;
    
      [JavaSignature('android/hardware/usb/UsbManager')]
      JUsbManager = interface(JObject)
        ['{6F603A25-E816-4012-9B23-054B428A4A75}']
        function getDeviceList: JHashMap; cdecl;//Deprecated
        function hasPermission(device: JUsbDevice): Boolean; cdecl; overload;//Deprecated
        function hasPermission(accessory: JUsbAccessory): Boolean; cdecl; overload;//Deprecated
        procedure requestPermission(accessory: JUsbAccessory; pi: JPendingIntent); cdecl; overload;//Deprecated
      end;
      TJUsbManager = class(TJavaGenericImport<JUsbManagerClass, JUsbManager>) end;

    Что бы получить доступ к методам интерфейса используется следующая конструкция:

      JavaObject := TAndroidHelper.Context.getSystemService(TJContext.JavaClass.USB_SERVICE);
      FUsbManager := TJUsbManager.Wrap((JavaObject as ILocalObject).GetObjectID);

    теперь я могу получить доступ к методам JUsbManager, а как получить доступ к методам JUsbManagerClass

    Вот пример кода на Java, который хочу реализовать в Delphi:

        UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
    
        List<UsbSerialDriver> availableDrivers = UsbSerialProber.getDefaultProber().findAllDrivers(manager);
        if (availableDrivers.isEmpty()) {
            return;
        }
    
        // Open a connection to the first available driver.
        UsbSerialDriver driver = availableDrivers.get(0);
    
    	//Вот тут мы видим что из экземпляра класса мы вызываем openDriver, как это сделать в Delphi
        UsbDeviceConnection connection = manager.openDevice(driver.getDevice());

    Как мы можем заметить этого метода в описании интерфейса нет, но есть в классе, как получить доступ к экземпляру класса?

×
×
  • Создать...