4

Google Playアプリケーションではなく、更新を行う方法を提供したいので、作成しているアプリケーションをプログラムで更新しようとしています。

アップデート用のAPKをダウンロードした後、Androidインストーラーを起動する方法を探していましたが、インストーラーから結果を取得する必要があります。これにより、アップデートが成功したかどうか、またはキャンセルされたかどうかがわかります。ユーザーによる。

私はこれについてStackOverflowでたくさんの質問を見ました、そして答えは通常放送受信機を使うことを含みました。それに関する問題は、インストールされているパッケージに関するインテントのみを受信でき、失敗のキャンセルされたインストールに関するインテントを受信できないことです。

さらに調査を行ったところ、Intent APIがIntent.EXTRA_RETURN_RESULTなどの追加機能を提供しているようです。これをtrueに設定すると、インストーラーアクティビティの結果が返されます。onActivityResultを使用していると思います。残念ながら、これは機能しません。これを機能させた人はいますか/このように機能しますか?

これが私が現在持っているインストーラーアクティビティの開始を準備するコードです:

            Intent installApp = new Intent(Intent.ACTION_INSTALL_PACKAGE);
            installApp.setData(downloadedApk);
            installApp.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
            installApp.putExtra(Intent.EXTRA_RETURN_RESULT, true);
            installApp.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, context.getApplicationInfo().packageName);
            context.startActivityForResult(installApp, 1);
4

1 に答える 1

3

フラグメントを使用していますか?onActivityResultは、startActivity(...)を呼び出したアクティビティまたはフラグメントから呼び出されます。Fragment#startActivity(...)は存在します。これを使用して、フラグメントのonActivityResult(...)を呼び出します。フラグメントを使用していない場合、この回避策は機能します。

回避策擬似コード

// CURRENT_VERSION is a const with the current APK version as int

Activity#onStart() {
  super.onStart();
  checkForUpdaterResult();
  /*...*/
}

Activity#checkForUpdaterResult() {
  final int updateVersion = preferences.getInt(UPDATE_VERSION, -1);
  switch(updateVersion) {
    case -1:break;
    default: 
      // updateVersion = oldVersion is smaller than the new currentVersion
      boolean success = updateVersion < CURRENT_VERSION;
      onUpdaterPerformed(success, updateVersion , CURRENT_VERSION); 
    break;
  }
}

Activity#startUpdate(File pAPK) {
  perferences.putInt(UPDATE_VERSION, CURRENT_VERSION);
  /*...*/
}

Activity#onUpdaterPerformed(boolean pSuccess, int pFromVersion, int pToVersion) {
  Toast.show("Update success: " + pSuccess);
  /* e.g. migrate DB */
  /*...*/
}
于 2013-03-12T17:17:27.490 に答える