我正在尝试在我的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);
答案 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。在“运行配置”下检查,检查指定的包名称是否与用于初始发布的包名称相同。