2013-09-21 46 views
1

从4.2开始,使用以下代码安装APK,如果APK版本低于当前安装的版本,安装将失败。有没有可以降级的PutExtra()?在Android 4.2中,当使用意图以编程方式安装APK时,您如何降级?

File file = new File(dir, "App.apk"); 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); 
startActivity(intent); 

或者我需要以不同的方式去做吗?

+0

我不知道支持降级的一般方法,除非是卸载应用程序,或者通过**'adb' **(针对开发人员)进行安装。 – CommonsWare

+1

即使使用adb,我从未设法降级安装的应用程序: - /我唯一知道的解决方案是首先卸载应用程序。这也非常合理,因为私有设置和持久数据布局可能会因版本而异。旧版本的应用程序不太可能应对新版本中的数据更改。 – tiguchi

+1

从4.2的命令行使用pm时,有一个-d选项可用于降级。从我的应用程序启动安装时,我想做同样的事情 – NebulaSleuth

回答

0

AFAIK的允许降级是正在安装的应用程序的功能,如果该应用程序允许降级否则将会降级当前安装的应用程序,你不能从

所以你意向你无法控制它

的设置,您可以在您的应用程序

这个属性,你可以在你的清单

设置设置

+1

我正在使用Mono for android,因此IDE中不存在“还原需要应用程序”选项。但在androidmanifest.xml的部分添加android:restoreAnyVersion =“true”并不能解决Android 4.2中的问题。清单中还需要其他选项吗? – NebulaSleuth

0

至少与同VERSIONNAME/VERSIONCODE作品以下额外的意图 (对我(的Android 4.2.2,银河S4主动):

Uri uri = Uri.fromFile(new File(PATH_TO_FILE_APK)); 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.putExtra('Intent.ACTION_PACKAGE_REPLACED', "your.package.name"); 
intent.setDataAndType(uri, "application/vnd.android.package-archive"); 
startActivity(intent); 

在我而言,这将重新启动应用程序后更换。