我的应用程序实现了自动升级功能,因为该应用程序不会发布到市场。apk文件托管在Web服务器上。我已经实现了以下链接的第一部分
现在当我运行应用程序时,会发生以下事情。
如果有新版本可用,则应用程序提示用户是否要升级。
如果用户选择是,则应用程序从服务器下载文件。
- 下载完成后,应用程序会提示用户是否要替换应用程序
- 如果用户点击确定,则应用程序开始安装但出现以下屏幕
没有提供日志文件信息,说明为什么会发生这种情况。请有人帮助我理解可能导致此问题的原因。这是默认的Android代码,用于生成最后2个屏幕而不是我的代码。
在异步任务上运行以下代码之后会出现此问题:
protected void onPostExecute(String result) {
super.onPostExecute(result);
// dismiss the progress dialog
mProgressDialog.dismiss();
// get the file
String path = getFilesDir().getAbsolutePath()+ File.separator + getString(R.string.apk_file);
File file = new File(path);
// if it exists
if(file.exists()) {
// create and start the intent with the new file
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);
} else {
// display error message
Toast.makeText(context, "File was not downloaded", Toast.LENGTH_LONG).show();
}
}
如果我卸载应用程序并使用浏览器进入文件位置,应用程序会自动下载,然后我可以从下载文件夹成功安装它。这可能是应用程序在当前运行时尝试自行安装的问题吗?文件在升级过程中下载到内存而不是SD卡位置,因为我无法保证用户设备上是否有SD卡。
startActivity(...)
之后立即调用finish()
。另一个可能的原因是设备上的当前版本是“发布”代码,而您正在使用“调试”代码进行升级(或反之亦然),这将导致升级失败。 - SquonkopenFileOutput(getString(R.string.apk_file), Context.MODE_WORLD_READABLE);
,所以这不是问题所在。 - Comic Coder