237

カスタム Android アプリケーションから動的にダウンロードされた apk をプログラムでインストールできます。

4

18 に答える 18

246

マーケットリンクまたはインストールプロンプトを簡単に起動できます。

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

ソース

Intent goToMarket = new Intent(Intent.ACTION_VIEW)
    .setData(Uri.parse("market://details?id=com.package.name"));
startActivity(goToMarket);

ソース

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

于 2011-01-05T14:07:33.877 に答える
56
File file = new File(dir, "App.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);

私は同じ問題を抱えていましたが、何度か試みた後、この方法でうまくいきました。理由はわかりませんが、データと型を別々に設定すると、意図が台無しになりました。

于 2011-03-17T10:58:14.253 に答える
33

さて、さらに深く掘り下げて、Android Source から PackageInstaller アプリケーションのソースを見つけました。

https://github.com/android/platform_packages_apps_packageinstaller

マニフェストから、許可が必要であることがわかりました:

    <uses-permission android:name="android.permission.INSTALL_PACKAGES" />

そして、インストールの実際のプロセスは確認後に発生します

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);
于 2011-01-05T14:17:45.267 に答える
5

受信アプリをハードコードする必要がないため、より安全な別のソリューション:

Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData( Uri.fromFile(new File(pathToApk)) );
startActivity(intent);
于 2015-01-22T21:30:52.953 に答える
4

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

market://details?id=package.name

アクティビティを開始する方法が正確にはわかりませんが、そのような URL でアクティビティを開始した場合。Android マーケットを開き、アプリをインストールする選択肢を提供する必要があります。

于 2011-01-05T13:21:22.667 に答える
2

これを試して

String filePath = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));
String title = filePath.substring( filePath.lastIndexOf('/')+1, filePath.length() );
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(filePath)), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // without this flag android returned a intent error!
MainActivity.this.startActivity(intent);
于 2015-03-14T16:12:06.657 に答える
0

UpdateNodeは、Android が別のアプリ内から APK パッケージをインストールするための API を提供します。

アップデートをオンラインで定義し、API をアプリに統合するだけです。それだけです。
現在、API はベータ版の状態ですが、すでにいくつかのテストを自分で行うことができます。

それに加えて、UpdateNode はシステムを介してメッセージを表示することもできます。これは、ユーザーに重要なことを伝えたい場合に非常に便利です。

私はクライアント開発チームの一員であり、少なくとも自分の Android アプリのメッセージ機能を使用しています。

API を統合する方法については、こちらの説明を参照してください

于 2014-03-24T14:27:13.360 に答える
0

これを試してください-マニフェストに書いてください:

uses-permission android:name="android.permission.INSTALL_PACKAGES"
        tools:ignore="ProtectedPermissions"

コードを書く:

File sdCard = Environment.getExternalStorageDirectory();
String fileStr = sdCard.getAbsolutePath() + "/Download";// + "app-release.apk";
File file = new File(fileStr, "app-release.apk");
Intent promptInstall = new Intent(Intent.ACTION_VIEW).setDataAndType(Uri.fromFile(file),
                        "application/vnd.android.package-archive");

startActivity(promptInstall);
于 2015-05-25T14:27:04.477 に答える