Einzelnen Beitrag anzeigen

sevo

Registriert seit: 7. Dez 2018
1 Beiträge
 
#5

AW: Heruntergeladenes APK starten in Android

  Alt 7. Dez 2018, 09:10
Hi,

ich habe das so umgesetzt:

1. Download des APK, das sollte asynchron / im Hintergrund geschehen, da sonst die App nicht mehr reagiert.
Delphi-Quellcode:
HttpClient := THTTPClient.Create;
try
  DestFile := TFileStream.Create('/sdcard/Download/' + DestFileName, fmCreate);
  HttpClient.Get(UpdateFile.DownloadURL, DestFile);
finally
  DestFile.Free;
end;
2. "Aufruf" des heruntergeladenen APK mittels Intent. FÜhrt dazu, dass der Benutzer das APK installieren und neu starten kann, oder abbrechen.
Diesen Aufruf führe ich im Synchronized/Mainthread aus.
Quelle: http://www.fmxexpress.com/build-your...ey-on-android/
Delphi-Quellcode:
aFile := TJFile.JavaClass.init(StringToJString('/sdcard/Download'), StringToJString(DestFileName));
Intent := TJIntent.Create;
Intent.setAction(TJintent.JavaClass.ACTION_VIEW);
Intent.addFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
Intent.setDataAndType(TJnet_Uri.Javaclass.fromFile(aFile), //Androidapi.JNI.Net.pas
                      StringToJString('application/vnd.android.package-archive'));
SharedActivityContext.startActivity(Intent);
Für asynchrone Funktionen die ein synchrone (bei z.B. Aktualisierung der GUI) Aktion triggern habe ich eine kleine Hilfsfunktion geschrieben:
Die Fkt. ShowActivity und HideActivity öffnen und schließen hier eine Form, die einen Ladebalken (Kreis) anzeigt und die Eingaben des Benutzer ignoriert (HardwareBack-Key).
Delphi-Quellcode:
procedure CallAsync(AsyncProc : TThreadProcedure; SyncProcCalledAfterAsync : TThreadProcedure);
begin
  if (Assigned(AsyncProc)) then begin
    ShowActivity;
    TThread.CreateAnonymousThread(
      procedure ()
      begin
        try
          AsyncProc;
        finally
          TThread.Synchronize(nil,
            procedure
            begin
              HideActivity;
              if (Assigned(SyncProcCalledAfterAsync)) then begin
                SyncProcCalledAfterAsync;
              end;
            end);
        end;
      end).Start;
  end;
end;
Gruß

sevo
  Mit Zitat antworten Zitat