Nach Download Datei ausführen

  • Antworten:4
Jona Kremer
  • Forum-Beiträge: 5

08.02.2018, 14:23:36 via Website

Hallo zusammen,

ich habe mir eine Funktion gebaut mit der beim Start meiner App geprüft wird ob ein Update vorhanden ist. Da die App nicht auf GooglePlay veröffentlich werden soll, ist dies nicht anders möglich. Gibt es eine Möglichkeit die heruntergeladene Datei auch automatisch nach dem Download zu öffnen?

Uri uri= Uri.parse("externe-webseite.de/apk/update.apk");
DownloadManager.Request r=new DownloadManager.Request(uri);
r.setDestinationInExternalPublicDir(Enviroment.DIRECTORY_DOWNLOADS, "update.apk");
r.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
DownloadManager dm=(DownloadManager) this.getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(r);
Kommentieren
Jona Kremer
  • Forum-Beiträge: 5

08.02.2018, 18:20:11 via Website

Hi Swa,

erst einmal Danke für die schnelle Antwort. Hat mich etwas weiter gebracht. Leider bricht der Installer immer ab. Ich habe auch die Tipps in den Kommentaren ausprobiert. Das einzige was ich anders habe ist die function finish() weil Android Studio das nicht zuläßt. Wenn ich die apk manuell installiere klappt alles einwandfrei. Hier noch mal mein Quelltext:

String destination = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)+"/update.apk";
                        File file = new File(destination);
                        if (file.exists())
                        {
                            file.delete();
                        }
                        final Uri uri= Uri.parse("externe-webseite.de/apk/update.apk");
                        DownloadManager.Request r= new DownloadManager.Request(uri);
                        r.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "update.apk");
                        r.setAllowedOverRoaming(false);
                        r.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                        r.setTitle("Update");
                        r.setDescription("Download der Update Datei");
                        final DownloadManager dm= (DownloadManager) uContext.getSystemService(DOWNLOAD_SERVICE);
                        final long downId= dm.enqueue(r);
                        BroadcastReceiver onComplete=new BroadcastReceiver() {
                            public void onReceive(Context ctxt, Intent intent)
                                {
                                    Intent install =new Intent(Intent.ACTION_VIEW);
                                    install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                    install.setDataAndType(dm.getUriForDownloadedFile(downId),dm.getMimeTypeForDownloadedFile(downId));
                                    ctxt.startActivity(install);
                                    ctxt.unregisterReceiver(this);
                                }

                        };
                        uContext.registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
Hilfreich?
Kommentieren
swa00
  • Forum-Beiträge: 3.704

08.02.2018, 20:44:40 via Website

Hallo Jona,

ich persönlich habe so etwas noch nicht umgesetzt , allerdings :

finish() beendet dir nicht die App, versuche mal system.exit(0)

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Kommentieren
Jona Kremer
  • Forum-Beiträge: 5

09.03.2018, 14:06:39 via Website

So bin leider jetzt erst wieder dazu gekommen: Ich habe das Programm jetzt weiter getestet und habe rausgefunden, dass alles funktioniert nur der Intent Aufruf das Programm zum Abstürzen bringt. Wenn ich anstelle des Intent einen Toast Aufruf mache, klappt alles. Meine Androidversion ist 7.0. Ich habe bis jetzt auch die finish() funktion einfach rausgeworfen, weil ich nicht nachvollziehen kann was die bewirken soll.

Hilfreich?
Kommentieren