安装APK程序
我想在我的android应用程序中实现AUTOUPDATE功能,因为它是一个未通过android市场发布的自定义应用程序。到目前为止,我有一切工作,但Android尝试安装应用程序,并说“应用程序未安装”。我不知道它是否重要,但应用程序已经在设备上,所以它是一个更新。安装APK程序
的应用程序从互联网下载并存储在SD卡中的APK文件。比我这样做:
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);
任何人都可以帮忙吗?谢谢。
这里是一个片段我用,它看起来基本上是一样的你我能看到的唯一区别是使用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的是不同的,即一个是签署解除键,一个是签订调试的关键。或者,如果这两个apks是在不同的计算机上编译的,你可以用两个不同的调试密钥进行签名。
注意,即使你不通过你仍然需要产生和应用程序签名的市场分布。调试密钥在1年后过期,一旦密钥过期,您的应用将停止工作。
请注意,只有在文件为'MODE_WORLD_READABLE'时,您的代码才能工作,因为它位于内部存储器上的应用程序本地位置('getFilesDir()')上。 – CommonsWare
伟大的一点。我忘了提到这一点,当我执行这个时,它肯定给我适合。 – FoamyGuy
是的,我想你知道它。 :-)但是我希望记录中的其他人能够通过这个答案。 – CommonsWare
1)检查清单文件中指定的应用程序名称是否和以前一样。
2)我想你可能必须去匹配一些包的信息。特别是如果应用程序是从不同的机器构建的,签名可能会有所不同(我对此并不是100%确定的)。 另外如果你使用Eclipse。在“运行配置”下检查,检查指定的包名是否与用于初始版本的包相同。
的'Uri'要创建在第一线并投入了'Intent'第二行是由'Uri'你在第三线提供覆盖。您可以简单地删除第一行并使用采用操作字符串的单参数“Intent”构造函数。另外,不要使用连接来创建路径 - 使用'File'构造函数,将'File'和'String'作为参数。 – CommonsWare