German Installation von Update nach FTP-Download

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,
ich biete für meine App eine vom PlayStore unabhängige Updateprüfung und den Download/Installation von Updates per FTP an.
Die Updateprüfung und ggf. der Download funktioniert problemlos, nur die Installation haut (zumindest bei neueren Androidversionen) nicht mehr hin.
Kann mir bitte jemnd sagen wo bei meinem älteren Code das Problem liegt oder wie ich das vereinfachen kann:
B4X:
Sub FTPu_DownloadCompleted (ServerPath As String, Success As Boolean)
    FTPu.CloseNow
    '
    If Success = True Then
        AddLog("Update wurde heruntergeladen, bereit zur Installation")
        '
        Wait For (CheckInstallationRequirements) Complete (Result As Boolean)
        If Result Then
            SendInstallIntent
        End If
        '
    Else
        AddLog("Update herunterladen - FEHLER")
        MsgboxAsync("Update konnte nicht heruntergeladen werden!","Problem [665]")
    End If
End Sub
            
Private Sub CheckInstallationRequirements As ResumableSub
    If phone.SdkVersion >= 26 And CanRequestPackageInstalls = False Then
        MsgboxAsync("Bitte erlauben Sie im folgenden Dialog die Installation des Updates...", "")
        Wait For Msgbox_Result(Result As Int)
        Dim in As Intent
        in.Initialize("android.settings.MANAGE_UNKNOWN_APP_SOURCES", "package:" & Application.PackageName)
        StartActivity(in)
        Wait For Activity_Resume '<-- wait for Activity_Resume
        Return CanRequestPackageInstalls
    Else If CheckNonMarketAppsEnabled = False Then
        MsgboxAsync("Bitte die Installation von Apps die nicht aus dem PlayStore kommen zulassen." & CRLF & _
                    "Unter Einstellungen - Sicherheit - unbekannte Herkunft"  & CRLF & _
                    "oder auch unter Einstellungen - Apps - unbekannte Herkunft", "")
        Return False
    Else
        Return True
    End If
End Sub
    
Private Sub CanRequestPackageInstalls As Boolean
    Dim ctxt As JavaObject
    ctxt.InitializeContext
    Dim PackageManager As JavaObject = ctxt.RunMethod("getPackageManager", Null)
    Return PackageManager.RunMethod("canRequestPackageInstalls", Null)
End Sub

Private Sub CheckNonMarketAppsEnabled As Boolean
    If phone.SdkVersion >= 26 Then Return True
    If phone.SdkVersion < 17 Or phone.SdkVersion >= 21 Then
        Return phone.GetSettings("install_non_market_apps") = "1"
    Else
        Dim context As JavaObject
        context.InitializeContext
        Dim resolver As JavaObject = context.RunMethod("getContentResolver", Null)
        Dim global As JavaObject
        global.InitializeStatic("android.provider.Settings.Global")
        Return global.RunMethod("getString", Array(resolver, "install_non_market_apps")) = "1"
    End If
End Sub

Private Sub SendInstallIntent
    Dim ApkName As String = "LF.apk"
    File.copy(File.DirInternal, ApkName, Starter.Provider.SharedFolder, ApkName)
    Dim i As Intent
    If phone.SdkVersion >= 24 Then
        i.Initialize("android.intent.action.INSTALL_PACKAGE", Starter.Provider.GetFileUri(ApkName))
        i.Flags = Bit.Or(i.Flags, 1) 'FLAG_GRANT_READ_URI_PERMISSION
    Else
        i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(Starter.Provider.SharedFolder, ApkName))
        i.SetType("application/vnd.android.package-archive")
    End If
    StartActivity(i)
End Sub
 

b4x-de

Active Member
Licensed User
Longtime User
Was genau haut denn nicht mehr hin? Gibt es eine Fehlermeldung? Bitte gib uns mehr Informationen zu dem auftretenden Problem, damit wir helfen können.

Sonst bleibt nur ein Schuss ins Blaue:
 
Last edited:

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

meine App beendet sich aber der Download wird nicht installiert.
Hier die Logmeldung, mit der ich allerdings nichts anfangen kann:
main_vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv6 (java line: 10406)
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4j.object.JavaObject.RunMethod(JavaObject.java:132)
at pbit.skat.listenfuehrer2.main._vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv6(main.java:10406)
at pbit.skat.listenfuehrer2.main$ResumableSub_CheckInstallationRequirements.resume(main.java:11357)
at pbit.skat.listenfuehrer2.main._vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv3(main.java:11329)
at pbit.skat.listenfuehrer2.main$ResumableSub_FTPu2_DownloadCompleted.resume(main.java:14084)
at pbit.skat.listenfuehrer2.main._ftpu2_downloadcompleted(main.java:14038)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:221)
at anywheresoftware.b4a.BA$2.run(BA.java:395)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:8046)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:703)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
Caused by: java.lang.SecurityException: Need to declare android.permission.REQUEST_INSTALL_PACKAGES to call this api
at android.os.Parcel.createExceptionOrNull(Parcel.java:3011)
at android.os.Parcel.createException(Parcel.java:2995)
at android.os.Parcel.readException(Parcel.java:2978)
at android.os.Parcel.readException(Parcel.java:2920)
at android.content.pm.IPackageManager$Stub$Proxy.canRequestPackageInstalls(IPackageManager.java:7438)
at android.app.ApplicationPackageManager.canRequestPackageInstalls(ApplicationPackageManager.java:3463)
... 18 more
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.pm.ComputerEngine.canRequestPackageInstalls(ComputerEngine.java:3974)
at com.android.server.pm.IPackageManagerBase.canRequestPackageInstalls(IPackageManagerBase.java:214)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:3801)
at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:6220)
at android.os.Binder.execTransactInternal(Binder.java:1281)
 

b4x-de

Active Member
Licensed User
Longtime User
Da lag ich gestern mit dem Schuss ins Blaue richtig. Es steht ja auch in deinem Log:

Caused by: java.lang.SecurityException: Need to declare android.permission.REQUEST_INSTALL_PACKAGES
 

b4x-de

Active Member
Licensed User
Longtime User
Nein, das machst du noch nicht. Insbesondere machst du Folgendes vielleicht auch noch nicht: "you will be required to declare this and any other high-risk permissions using the Permissions Declaration Form in Play Console." Siehe Link oben
 
Top