In einem meiner Anwendungsfall die Anwendung am Anfang Kontakte Server und lädt das Update der gleichen Anwendung.APK Installation programmatisch auf Marshmallow
Zum Herunterladen verwende ich die DownloadManager-Klasse von Android. Mit dem folgenden Code wird versucht, die App-Installer-Absicht in onReceive()
zu erstellen, d. H. Nachdem das APK erfolgreich heruntergeladen wurde.
@Override
public void onReceive(Context context, Intent intent) {
//check if the broadcast message is for our Enqueued download
long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
if (downloadReference == referenceId) {
try {
Log.v("", "Downloading of the new app version complete");
String filepath = Environment.getExternalStorageDirectory() + "/" +
Environment.DIRECTORY_DOWNLOADS + "/" + mLatestVersionFileName;
//start the installation of the latest version
Uri uri = downloadManager.getUriForDownloadedFile(downloadReference);
//downloadManager.getUriForDownloadedFile(downloadReference)
Uri fileLoc = Uri.fromFile(new File(filepath));
Intent promptInstall = new Intent(Intent.ACTION_VIEW);
promptInstall.setDataAndType(uri, "application/vnd.android.package-archive");
promptInstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(promptInstall);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Der Code funktioniert für Pre-Eibisch Geräte Fein- und Benutzer erhält den Bildschirm APK zu installieren.
Dies funktioniert nicht auf Marshmallow-Gerät.
Ich bin immer auf Eibisch folgende Ausnahme:
android.content.ActivityNotFoundException: Keine Aktivität gefunden Intent {Akt handle = android.intent.action.VIEW dat = Inhalt: // downloads/my_downloads/287 typ = application/vnd.android.package-Archiv flg = 0x10000000}
ich habe versucht, folgende Dinge:
- Mit dem genauen PackageInstaller von Mar shmallow
(com.google.android.packageinstaller/com.android.packageinstaller.PackageInstallerActivity)
Komponentenname als Teil der Absicht. - Übergabe von FileLoc anstelle von URI.
promptInstall.setDataAndType(uri, "application/vnd.android.package-archive");
Diese in 'Parse error' führt.
Idealerweise werden Intents durch Android OS aufgelöst. Ich denke, es ist kein großes Problem und ich vermisse vielleicht etwas beim Erstellen von Intent.