カスタム Android アプリケーションから動的にダウンロードされた apk をプログラムでインストールできます。
18 に答える
マーケットリンクまたはインストールプロンプトを簡単に起動できます。
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をインストールすることはできません。デバイスとプログラムがルート化されていない限り、そうではありません。
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);
私は同じ問題を抱えていましたが、何度か試みた後、この方法でうまくいきました。理由はわかりませんが、データと型を別々に設定すると、意図が台無しになりました。
さて、さらに深く掘り下げて、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);
受信アプリをハードコードする必要がないため、より安全な別のソリューション:
Intent intent = new Intent(Intent.ACTION_INSTALL_PACKAGE);
intent.setData( Uri.fromFile(new File(pathToApk)) );
startActivity(intent);
はい、可能です。ただし、そのためには、検証されていないソースをインストールする電話が必要です。たとえば、slideMe はそれを行います。あなたができる最善のことは、アプリケーションが存在するかどうかを確認し、Android マーケットにインテントを送信することだと思います。AndroidマーケットのURLスキームを使用する必要があります。
market://details?id=package.name
アクティビティを開始する方法が正確にはわかりませんが、そのような URL でアクティビティを開始した場合。Android マーケットを開き、アプリをインストールする選択肢を提供する必要があります。
これを試して
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);
UpdateNodeは、Android が別のアプリ内から APK パッケージをインストールするための API を提供します。
アップデートをオンラインで定義し、API をアプリに統合するだけです。それだけです。
現在、API はベータ版の状態ですが、すでにいくつかのテストを自分で行うことができます。
それに加えて、UpdateNode はシステムを介してメッセージを表示することもできます。これは、ユーザーに重要なことを伝えたい場合に非常に便利です。
私はクライアント開発チームの一員であり、少なくとも自分の Android アプリのメッセージ機能を使用しています。
これを試してください-マニフェストに書いてください:
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);