Olá. Estou tentando utlizar a sdk de um fabricante, mas me gerou uma duvida referente a criar a classe de callback.
No android studio criei um projeto apenas para importar o sdk do fabricante.
Depois eu gerei o APK e o descompactei para pegar o arquivo .dex que tem a sdk.
Feito isso converti em jar e depois adicionei o jar no meu projeto Delphi.
Logo em seguida, gerei a JNI do jar usando o Java2OP.
Segue um pedaço do fonte gerado:
JIPrinterCallbackClass = interface(JIInterfaceClass)
['{ABEF5590-D20B-43A1-A35B-807051A7330D}']
end;
[JavaSignature('com/getnet/posdigital/printer/IPrinterCallback')]
JIPrinterCallback = interface(JIInterface)
['{08B39C40-A389-4ED5-9E6B-DA7D6A8C7600}']
procedure onError(P1: Integer); cdecl;
procedure onSuccess; cdecl;
end;
TJIPrinterCallback = class(TJavaGenericImport<JIPrinterCallbackClass>) end;
JIPrinterCallback_StubClass = interface(JBinderClass)
['{758A2E1B-E31A-4221-BAC7-8092F224090A}']
{class} function asInterface(P1: JIBinder): JIPrinterCallback; cdecl;
{class} function init: JIPrinterCallback_Stub; cdecl;
end;
[JavaSignature('com/getnet/posdigital/printer/IPrinterCallback$Stub')]
JIPrinterCallback_Stub = interface(JBinder)
['{CF6E873A-2FA2-4C71-A2FA-66B27EDA1A72}']
function asBinder: JIBinder; cdecl;
function onTransact(P1: Integer; P2: JParcel; P3: JParcel; P4: Integer): Boolean; cdecl;
end;
TJIPrinterCallback_Stub = class(TJavaGenericImport<JIPrinterCallback_StubClass>) end;
JIPrinterCallback_Stub_ProxyClass = interface(JIPrinterCallbackClass)
['{D013AB01-DBD9-4CC3-AC42-CB036F080131}']
end;
[JavaSignature('com/getnet/posdigital/printer/IPrinterCallback$Stub$Proxy')]
JIPrinterCallback_Stub_Proxy = interface(JIPrinterCallback)
['{5FB7E803-D568-43F9-8F42-634E96FC5279}']
function asBinder: JIBinder; cdecl;
function getInterfaceDescriptor: JString; cdecl;
procedure onError(P1: Integer); cdecl;
procedure onSuccess; cdecl;
end;
TJIPrinterCallback_Stub_Proxy = class(TJavaGenericImport<JIPrinterCallback_Stub_ProxyClass>) end;
Eu fiz teste onde eu chamo a função Bip e funcionou perfeitamente indicando que a aplicação Delphi esta se comunicando com o dispositivo atraves do SDK.
O detalhe é que a função Bip não recebe um parametro que é um callback, mas tem funções que precisa passar o callback e é nesse ponto que travei.
No java teria que ser assim a classe:
class PrinterCallbackStub extends IPrinterCallback.Stub {
@Override
public void onSuccess() throws RemoteException {
}
@Override
public void onError(int i) throws RemoteException {
}
}
Como tem que ficar essa classe em Delphi?
Desde já agradeço.