4

アプリは市場にリリースされないため、私のアプリは自動アップグレード機能を実装しています。apkファイルはウェブサーバーでホストされています。次のリンクのパート1を実装しました

AsyncTaskを使用して、ダウンロードの進行状況をダイアログに表示します

アプリケーションを実行すると、次のことが発生します。

  1. 新しいバージョンが利用可能な場合、アプリケーションはユーザーにアップグレードするかどうかを尋ねます。 アップグレードプロンプト

  2. ユーザーが[はい]を選択すると、アプリケーションはサーバーからファイルをダウンロードします。 ダウンロード

  3. アプリが完了すると、ユーザーがアプリを置き換えるかどうかを確認するメッセージが表示されます プロンプトを置き換える
  4. ユーザーが[OK]をクリックすると、アプリケーションのインストールが開始されますが、次の画面で失敗します ここに画像の説明を入力してください

これが発生する理由に関するログファイル情報は提供されていません。誰かがこの問題の原因を理解するのを手伝ってくれませんか。これは、私のコードではなく、fianl2画面を生成するためのデフォルトの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. 古いapkと新しいapkが同じキーで署名され、同じパッケージ名を持っていることを確認してください。それ以外の場合は、同じエラーが表示されます。

  2. finishの直後にアクティビティを呼び出してみてください(または単に使用してくださいSystem.exitstartActivity

于 2012-06-18T18:04:19.090 に答える