プログラムによるAndroidへのアプリケーションのインストール

私は、カスタムAndroidアプリケーションから動的にダウンロードされたapkをプログラム的にインストールすることが可能かどうかを知ることに興味があります。

ソリューション

プレイストアのリンクやインストールプロンプトを簡単に起動することができます。

Intent promptInstall = new Intent(Intent.ACTION_VIEW)
    .setDataAndType(Uri.parse("content:///path/to/your.apk"), 
                    "application/vnd.android.package-archive");
startActivity(promptInstall); 

または

Intent goToMarket = new Intent(Intent.ACTION_VIEW)
    .setData(Uri.parse("https://play.google.com/store/apps/details?id=com.package.name"));
startActivity(goToMarket);

しかし、ユーザーの明示的な許可なしに.apkをインストールすることはできず、デバイスとプログラムがルート化されていない限りはできません。

解説 (16)

そこで、さらに調べてみたところ、Android SourceからPackageInstallerアプリケーションのソースが見つかりました。

https://github.com/android/platform_packages_apps_packageinstaller

マニフェストから、パーミッションが必要であることがわかりました。

そして、実際のインストール作業は、確認後に行われます

Intent newIntent = new Intent();
newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO, mPkgInfo.applicationInfo);
newIntent.setData(mPackageURI);
newIntent.setClass(this, InstallAppProgress.class);
String installerPackageName = getIntent().getStringExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME);
if (installerPackageName != null) {
   newIntent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME, installerPackageName);
}
startActivity(newIntent);
解説 (1)

はい、可能です。しかし、そのためには、検証されていないソースをインストールするための携帯電話が必要です。例えば、slideMeはそのようなものです。私は、あなたができる最善のことは、アプリケーションが存在するかどうかを確認し、アンドロイドマーケット用のインテントを送信することだと思います。

market://details?id=package.name

具体的にどのようにアクティビティを開始するのか分かりませんが、そのようなURLでアクティビティを開始した場合。アンドロイドマーケットを開き、アプリをインストールするための選択肢を与えるはずです。

解説 (1)