2013-10-22 4 views
7

Ist es möglich, Downgrade bei der Installation von apk mit Absicht auf Android 4.2 + zu aktivieren? Ich habe herausgefunden, dass es möglich ist, bei der Installation der App über die Befehls-Shell (mit -d) adb install -r -d <link to apk>, so hoffe ich, dass es irgendwie auch über Intent möglich ist. Ich suchte nach einer Flagge oder etwas, aber ich fand nichts hilfreiches.Aktivieren Sie Downgrade bei der Installation von apk mit Absicht auf Android 4.2 +

Das ist meine Absicht Paket-Installer zu öffnen:

Intent intent = new Intent(Intent.ACTION_VIEW); 
Uri applicatonFileUri = Uri.fromFile(applicationFile); 
intent.setDataAndType(applicatonFileUri, PACKAGE_TYPE); 
startActivity(intent); 
+2

Wenn dies Ihre Unternehmenskunden so sehr verärgert hat wie meine, dann sollten Sie das Problem hier auflisten: https://code.google .com/p/android/issues/detail? id = 62545 –

Antwort

11

, die für nicht-Plattform (3rd Party) Anwendungen nicht möglich ist: Sie können die Installation Antrag stellen müssen direkt an PackageManager.

Packagemanager hat nicht öffentliche API, installPackage() (Linie 2584 zum Zeitpunkt des Schreibens):

/** 
* @hide 
* 
* Install a package. Since this may take a little while, the result will 
* be posted back to the given observer. An installation will fail if the calling context 
* lacks the {@link android.Manifest.permission#INSTALL_PACKAGES} permission, if the 
* package named in the package file's manifest is already installed, or if there's no space 
* available on the device. 
* 
* @param packageURI The location of the package file to install. This can be a 'file:' or a 
* 'content:' URI. 
* @param observer An observer callback to get notified when the package installation is 
* complete. {@link IPackageInstallObserver#packageInstalled(String, int)} will be 
* called when that happens. observer may be null to indicate that no callback is desired. 
* @param flags - possible values: {@link #INSTALL_FORWARD_LOCK}, 
* {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}. 
* @param installerPackageName Optional package name of the application that is performing the 
* installation. This identifies which market the package came from. 
*/ 
public abstract void installPackage(
     Uri packageURI, IPackageInstallObserver observer, int flags, 
     String installerPackageName); 

, wo eine der möglichen Flags ist INSTALL_ALLOW_DOWNGRADE:

/** 
* Flag parameter for {@link #installPackage} to indicate that it is okay 
* to install an update to an app where the newly installed app has a lower 
* version code than the currently installed app. 
* 
* @hide 
*/ 
public static final int INSTALL_ALLOW_DOWNGRADE = 0x00000080; 

Alle diese APIs sind versteckt und nicht für Apps von Drittanbietern verfügbar. Jetzt können Sie versuchen, darüber nachzudenken, aber ich bin ziemlich positiv, dass die Plattform den Zugang zu ihnen sowieso einschränken wird.

+9

Frage sollte mit "damn-you-google" getaggt sein ... –

0

Eine weitere mögliche Lösung ist eine andere App, die zuerst Ihre App deinstalliert und dann erneut installiert. Ich konnte keinen anderen Weg finden, wenn jemand eine bessere Lösung findet, lass es mich wissen :)