2

実行中の Android アプリ内から、この同じアプリを (1) プライベート Web サーバーから再ダウンロードし、(2) 再インストールし、(3) 再インストール後に再起動するように要求したいと思います。

ステップ 1 と 2 の実行方法は知っていますが、ステップ 3 の実行方法がわかりません。

ダウンロード後、次のようにステップ 2 を実行します ( this.apkpathは、以前に SD カードにダウンロードした APK のフル パス名に設定されています)。

try {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.setDataAndType(Uri.fromFile(new File(this.apkpath)),
                        "application/vnd.android.package-archive");
  this.activity.startActivity(intent);
}
catch (Throwable t) {
  // handle exceptions
}

このコードが成功すると、画面にインストール確認ダイアログが表示され、この確認時に再インストールが行われます。ただし、インストール後、コントロールはデスクトップ マネージャーに戻り、新しく再インストールしたアプリを手動で再起動する必要があります。

この再インストール後にアプリを強制的に再起動するには、プログラムで何ができますか?

4

2 に答える 2

6

再インストール後にアプリを再起動する方法を見つけました。他の人に役立つ場合は、次のようにしました( startActivity の前に追加された「addFlags メソッド呼び出しに注意してください):

try {
  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.setDataAndType(Uri.fromFile(new File(this.apkpath)),
                       "application/vnd.android.package-archive");
  // Add this line ...
  intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  this.activity.startActivity(intent);
}
catch (Throwable t) {
  // handle exceptions
}

これを実行すると、インストール ダイアログの後にオープン リクエスト ダイアログが表示されます。[開く] をクリックすると、アプリが実際に再起動します。これは私のニーズには十分です。

于 2013-03-25T21:14:36.340 に答える
0

幸いなことに、これは Android 3.1 以降では不可能です。インストール時にアプリケーションを単純に起動することはできません。具体的には、Mark Murphy 氏は次のように説明しています。

アプリケーションは、最初に何らかのアクティビティを通じてユーザーによって呼び出される必要があります。または、マニフェストを介して関連するブロードキャストにフックする必要がありIntentます。これにより、これらのイベントのいずれかが発生したときに制御を取得し、その方法でサービスを開始できます。BOOT_COMPLETED Intentまたは、フィルターを制御できるように、ユーザーに再起動を求める必要があります。

つまり、フックしBOOT_COMPLETEDてアプリケーションを起動することもできますが、これには明らかに再起動が必要です。

製図板に戻って、ここで達成しようとしていることを再考することをお勧めします。あなたが本当にこの特定のアプローチを取ることに決めているなら、この厄介な回避策がありますが、私はあなたがその道に進まないように強く勧めます.

別の方法として、 を介してイベントをスケジュールすることもできますAlarmManager。アプリケーションを再インストールしたときにイベントが削除されるかどうかはわかりません。

(幸いなことに、この動作はマルウェアによる悪用を招いているだけでなく、ユーザーの意図と一致しないためです。)

于 2013-03-24T16:07:08.987 に答える