Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Android APP - send via BroadcastChannel to website (https://www.delphipraxis.net/200705-android-app-send-via-broadcastchannel-website.html)

erich.wanker 17. Mai 2019 10:34

Android APP - send via BroadcastChannel to website
 
Hallo ..

ich bräuchte eine Android App, wo nix anderes als folgendes passiert:

1.) App hat in Titlebar rechts oben ein "x" zum beenden

2.) Ein Fullscreen-Webbrowser-Componente mit fixer URL (www.meine-webseite.at/meine_ISAPI_Anwendung.dll)

3.) Wenn der Android Back Button gedrückt wird - wird nicht das Programm geschlossen, sondern via BroadcastChannel eine Information an die Webbrowser-Componente gesendet...

Wie kann ich Punkt 3 realisieren?

In meiner ISAPI Anwendung regle ich dann die BroadcastChannel-Information situationsbedingt..




in meiner ISAPI:

Erstellen tue ich den BroadcastChannel via:
Delphi-Quellcode:
if ("BroadcastChannel" in window) { var messageReceiver= new BroadcastChannel("Consumer"); }



Den Listener leite ich auf ein ajaxRequest um:
Delphi-Quellcode:
if ("BroadcastChannel" in window) { messageReceiver.onmessage = function(event) {  ajaxRequest(MainForm.form,''' + event_name + ''',[''param0=''+event.data+'''']); } }


Senden tue ich via:
Delphi-Quellcode:
if ("BroadcastChannel" in window) { broadcaster.postMessage("' + event_data + '"); }





Der Original-Quelltext meiner ISAPI DLL:

Delphi-Quellcode:
procedure TMainForm.create_Broadcast_and_listener;
var
  event_name: String;
begin
  event_name := 'MENUE';
  UniSession.AddJS('if ("BroadcastChannel" in window) { var messageReceiver= new BroadcastChannel("Consumer"); }');
  UniSession.AddJS('if ("BroadcastChannel" in window) { messageReceiver.onmessage = function(event) {  ajaxRequest(MainForm.form,''' + event_name + ''',[''param0=''+event.data+'''']); } }');

end;

procedure TMainForm.send_broadcast(event_data: String);
begin
  UniSession.AddJS('if ("BroadcastChannel" in window) { var broadcaster = new BroadcastChannel("Consumer"); }');
  UniSession.AddJS('if ("BroadcastChannel" in window) { broadcaster.postMessage("' + event_data + '"); }');
end;


procedure TMainForm.UniFormAjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings);
begin
  // Broadcast Info ....
 if EventName = 'MENUE' then
 begin
 showmessage(parameter_0);
 ....

Rollo62 17. Mai 2019 11:08

AW: Android APP - send via BroadcastChannel to website
 
Vielleicht ilft dir das hier weiter ?

erich.wanker 17. Mai 2019 11:26

AW: Android APP - send via BroadcastChannel to website
 
Das Hardware Back - denke ich - sollte so aussehen (ungetestet):

(aber WIE sende ich via BroadcastChannel ?)

Delphi-Quellcode:
uses FMX.Platform,FMX.VirtualKeyboard,FMX.Helpers.Android;

procedure THeaderFooterForm.FormKeyUp(Sender: TObject; var Key: Word;
  var KeyChar: Char; Shift: TShiftState);

var FService : IFMXVirtualKeyboardService;
begin
  if Key = vkHardwareBack then
    begin
      TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(FService));
      if (FService <> nil) and (vksVisible in FService.VirtualKeyBoardState) then
        begin
          // Back button pressed, keyboard visible, so do nothing...
          key:=0;
        end
      else
        begin
          key:=0;
??????.. Sende via BroadcastChannel :  broadcaster.postMessage("_mein_hardware_back");
        end;
     end
..
.

mjustin 17. Mai 2019 14:29

AW: Android APP - send via BroadcastChannel to website
 
Kann die Frage auch so formuliert werden?

"Wie kann ich aus einer Delphi/FMX Anwendung auf einen Webbrowser (der eine Android WebView kapselt) zugreifen und ihn JavaScript-Code ausführen lassen?"

Dann sollte das hier weiterhelfen:

https://stackoverflow.com/questions/...ndroid-webview


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz