9

アプリが APK をインストールしようとしています。

Intent installIntent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
installIntent.setData(Uri.fromFile(new File(pathToApk)));
installIntent.putExtra(Intent.EXTRA_NOT_UNKNOWN_SOURCE, true);
installIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
((Activity)context).startActivityForResult(installIntent, Constants.APP_INSTALL_REQUEST);

私の活動で

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case Constants.APP_INSTALL_REQUEST:
            if(resultCode == RESULT_OK){
                Log.e(TAG, "Package Installation Success");
            }else if(resultCode == RESULT_FIRST_USER){
                Log.e(TAG, "Package Installation Cancelled by USER");
            }else{
                Log.e(TAG, "Something went wrong - INSTALLATION FAILED");
            }

私の startActivityResult が起動されると、システム インストール UI がまだユーザーの許可を待っている間に、私のアクティビティは RESULT_CANCELLED に対応する結果コード 0 を即座に取得します。

ここに画像の説明を入力

インストールが成功したかどうかを実際に知り、それに基づいて UI を更新するという私の活動。

どんな助けでも大歓迎です。

4

1 に答える 1

13

犯人が見つかりました。

* installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);*

システムはアクティビティの既存のインスタンスを復活させますが、それは新しい TASK スタックにあります。そのため、システムは新しい TASK を開始する前に activityForResult をキャンセルします。

ありがとうございました

于 2013-11-07T01:07:56.243 に答える