2013-10-22 29 views
7

Có thể bật hạ cấp khi cài đặt apk bằng ý định trên Android 4.2+ không? Tôi phát hiện ra rằng nó có thể, khi cài đặt ứng dụng thông qua lệnh shell (sử dụng -d) adb install -r -d <link to apk>, vì vậy tôi hy vọng nó bằng cách nào đó có thể cũng thông qua Intent. Tôi đã tìm kiếm một số lá cờ hoặc một cái gì đó, nhưng tôi đã không tìm thấy bất cứ điều gì hữu ích.Bật hạ cấp khi cài đặt apk bằng ý định trên Android 4.2+

Đây là ý định của tôi để mở gói cài đặt:

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

Nếu điều này làm khách hàng doanh nghiệp của bạn khó chịu nhiều như tôi, hãy khắc phục vấn đề ở đây: https://code.google .com/p/android/issues/detail? id = 62545 –

Trả lời

11

Đó không phải là có thể cho phi-platform (3rd-party) ứng dụng: bạn phải thực hiện yêu cầu cài đặt trực tiếp đến PackageManager.

PackageManager có API ngoài công lập, installPackage() (dòng 2584 như các văn bản này):

/** 
* @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); 

nơi mà một trong những lá cờ có thể là 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; 

Tất cả các API được ẩn và không thể truy cập cho các ứng dụng của bên thứ ba. Bây giờ, bạn có thể thử suy nghĩ, nhưng tôi khá tích cực rằng nền tảng sẽ hạn chế truy cập vào chúng anyway.

+9

Câu hỏi phải được gắn thẻ 'damn-you-google' ... –

0

Một giải pháp khác có thể là có ứng dụng khác gỡ cài đặt ứng dụng của bạn trước rồi cài đặt lại ứng dụng. Tôi không thể tìm thấy cách khác, nếu ai đó tìm thấy giải pháp tốt hơn, vui lòng cho tôi biết :)

Các vấn đề liên quan