German Update-APK installieren

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

in meiner App möchte ich die Möglichkiet anbieten, ein evtl. vorhandenes Update von einem lokalen Rechner herunterzuladen und zu installieren.
Die Updateprüfung und der Download funktionieren problemlos, nur wie installiere ich dann die APK?
Dieser ältere Code scheint - zumindest unter Android-9 - nicht mehr zu funktionieren:
B4X:
Sub SMBupdate_DownloadCompleted (uurl As String, RemoteFile As String, Success As Boolean)
    If Success = True Then
        ProgressDialogHide
        'Msgbox("Update gefunden","Test")
        ProgressDialogShow("Update gefunden ... Installation wird gestartet...")
        '
        Dim i As Intent
        i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(File.DirInternal, "update.apk"))
        i.SetType("application/vnd.android.package-archive")
        StartActivity(i)
        '
    Else
        ProgressDialogHide
        Msgbox("Es wurde kein Update gefunden." & CRLF & _
               "Diese Version ist noch aktuell","Updatesuche")
    End If
End Sub
 

DonManfred

Expert
Licensed User
Longtime User

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

die Installation des Updates habe ich mit einigen kleinen Änderungen am Beispielcode und meiner Standardstrategy "try-and-error" hingebracht.
Aber sollte die App danach nicht wieder automatisch starten???
 

DonManfred

Expert
Licensed User
Longtime User
Aber sollte die App danach nicht wieder automatisch starten???
Nur, wenn Sie selber einen Intentfilter aktiv hat.
B4X:
AddReceiverText(appupdrec,
<intent-filter>
    <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
</intent-filter>)
wobei appupdrec ein B4A Service ist. Hinweis: Nimm nicht den Starterservice hierfür.

appupdrec Service:
#Region  Service Attributes
    #StartAtBoot: False

#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.

End Sub

Sub Service_Create

End Sub

Sub Service_Start(startingIntent As Intent)
    Log("appupdrec.Service_Start("&startingIntent.Action&")")
    If startingIntent.Action = "android.intent.action.MY_PACKAGE_REPLACED" Then
        'Log("sleep(2000)")
        Sleep(2000)
        Log("StartActivity.Main")
        StartActivity(Main)
    End If
    Service.StopAutomaticForeground
End Sub

Sub Service_Destroy

End Sub
 

peternmb

Well-Known Member
Licensed User
Longtime User
Halölo, vielen Dank.

Den oberen Code habe ich meiner Manifestdatei hinzugefügt, für den unteren Code ein eigenes Servicemodul angelegt
Ich hoffe, alles richtig gemacht zu haben, bekomme aber trotzdem beim Compilieren eine Fehlermeldung:

1578218283257.png

es müsste in Zeile 24 vermulich "Service.StopForeground" heißen, aber was ist die ID, die ich als Parameter mitgeben muss?
 

peternmb

Well-Known Member
Licensed User
Longtime User
ich bin davon ausgegangen dass du b4a 9.5 einsetzt
ja, ich will die nächsten Tage endlich das Update machen...

Es wird jetzt alles ohne Fehlermeldung compiliert, das Update wird installiert aber das Programm immer noch nicht neu gestartet :confused:

Ich bin davon ausgegangen, dass für den Neustart der App nur irgendeinen fehlenden Parameter benötigt wird.
Wenn das zu aufwändig ist kann ich auch gut ohne leben, das Wichtigste war die problemlose Installation des Updates auch unter Android-9.
 
Top