4

我的应用程序实现了自动升级功能,因为该应用程序不会投放市场。apk 文件托管在网络服务器上。我已经实现了以下链接的第一部分

使用 AsyncTask 并在对话框中显示下载进度

现在,当我运行应用程序时,会发生以下事情。

  1. 如果有新版本可用,则应用程序会提示用户是否要升级。 升级提示

  2. 如果用户选择是,则应用程序从服务器下载文件。 下载

  3. 完成后,应用程序会提示用户是否要替换应用程序 替换提示
  4. 如果用户点击确定,则应用程序开始安装,但失败并显示以下屏幕 在此处输入图像描述

没有提供关于为什么会发生这种情况的日志文件信息。请有人帮助我了解可能导致此问题的原因。这是生成 fianl 2 屏幕的默认 android 代码,而不是我的代码。

在异步任务上运行以下代码后会发生这种情况:

    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 卡。

4

1 回答 1

5
  1. Be sure that old and new apks signed with the same key and have the same package name. Otherwise you will see the same error.

  2. Try to call finish to your activity(or just use System.exit) just after startActivity.

于 2012-06-18T18:04:19.090 回答