9

私のAndroidアプリケーションには新しいバージョンにアップグレードするオプションがあります。最新バージョンのAPKでは、sdcardのパスの下で使用できるようにしています。アップグレードオプションをクリックすると、私は以下のメソッドを呼び出します。Androidパッケージインストーラ - 「開く」と「完了」とその結果の両方を取得するにはどうすればよいですか?

public static void launchInstaller(Activity act, String apkPath) 
    { 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(Uri.fromFile(new File(apkPath)), "application/vnd.android.package-archive"); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     act.startActivityForResult(intent, 0); 
    } 

アップグレード、後に、私は、このフラグを使用しない場合は表示されません「オープン」&「完了」オプションを持つようにしたい、ので、私はFLAG_ACTIVITY_NEW_TASKを含める理由は、あります。

上記のコードでパッケージインストーラを起動すると、2つのオプションがあります。OK &キャンセル、ユーザがキャンセルを押すと、キャンセルされたことを知りたいと思います。しかし、私はonActivityResultがpre-maturelyと呼ばれるので、わかりません。私は次の記事を読んだ後に起こっている理由に来ています。

Android - startActivityForResult immediately triggering onActivityResult

onActivityResult() called prematurely

彼らは私が活動を起動するために使用しています意向がFLAG_ACTIVITY_NEW_TASKがそれに設定されていないことを確認するために私に尋ねます。ここを参照してください:特に注目すべきで

http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK

を:「このフラグは、呼び出し元が 起動され活動からの結果を要求するときに使用することはできません。」

活動は一つのタスクでの活動が同じで、別のタスクに のみ活動し、結果を返すことができないので、すぐにRESULT_CANCELED でonActivityResult()を呼び出しますし、新しいタスクのAndroid の一部として起動されている場合タスクはそうすることができます。

しかし私の場合、FLAG_ACTIVITY_NEW_TASKは削除できません。そうでないと、正常にアップグレードされたときに「開く」と「完了」オプションが表示されないためです。

誰もが同様の問題に直面していますか?親切に私を助け、それが私を狂わせる。

+0

私は同じ問題があります。これの解決? – Himanshu

答えて

3

パッケージの追加ブロードキャストインテントを使用する必要があります。ブロードキャスト受信者を作成するlisten package added. 追加パッケージがパッケージと等しい場合、ユーザーはインストールを確認します。そうでない場合はインストールプロセスを終了します。どのような種類のエキストラがアンドロイドによって返されるのか尋ねると、アンドロイドはパッケージについてEXTRA_UIDを返します。 (getPackagesForUid(int uid))は文字列配列を返しますが、普通は配列内の1つの項目を配列の長さは通常1になります。

関連する問題