以编程方式安装APK

时间:2011-11-03 21:12:23

标签: android install package auto-update

我正在尝试在我的Android应用程序中实现AUTOUPDATE功能,因为它是一个未通过Android市场发布的自定义应用程序。到目前为止,我有一切工作,但Android尝试安装应用程序并说“应用程序未安装”。我不知道它是否重要,但应用程序已经在设备上,所以它是一个更新。

该应用程序从互联网上下载APK文件并将其存储在SD卡上。比我这样做:

    Uri packageURI = Uri.parse("package:my_package");
    Intent intent = new Intent(Intent.ACTION_VIEW, packageURI);
    intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/download/" + ApkName)), 
            "application/vnd.android.package-archive");
    startActivity(intent);  

2 个答案:

答案 0 :(得分:3)

这是我使用的一个片段,它看起来与你的基本相同,唯一的区别是我能看到的是使用packageURI。我不知道使用packageURI是否会导致它无法正常工作,但如果我是你,我会尝试不用。

File appFile = new File(ScreenSaverActivity.this.getFilesDir() + File.separator + APPLICATION_FILE_NAME);
Intent installIntent = new Intent(Intent.ACTION_VIEW);
installIntent.setDataAndType(Uri.fromFile(appFile),"application/vnd.android.package-archive");
startActivity(installIntent);

然而,通常当您在尝试安装时看到“未安装应用程序”消息时,意味着用于签署2个apk的签名是不同的,即一个是签名的发布密钥,一个是签名的调试密钥。或者,如果2个apks是在不同的计算机上编译的,那么你可以使用2个不同的调试密钥对它们进行签名。

请注意,即使您没有通过市场进行分发,您仍需要生成并签署您的申请。调试密钥在1年后过期,一旦密钥过期,您的应用将停止工作。

答案 1 :(得分:0)

1)检查清单文件中指定的应用程序名称是否与之前相同。

2)我猜你可能需要获得更多匹配的包信息。特别是如果应用程序是从不同的机器构建的,签名可能会有所不同(我对此不是100%肯定)。 如果您使用的是Eclipse。在“运行配置”下检查,检查指定的包名称是否与用于初始发布的包名称相同。