Özel bir Android uygulamasından dinamik olarak indirilen bir apk'yi programlı olarak yüklemenin mümkün olup olmadığını bilmek istiyorum.
Bir oyun mağazası bağlantısını veya bir yükleme istemini kolayca başlatabilirsiniz:
Intent promptInstall = new Intent(Intent.ACTION_VIEW)
.setDataAndType(Uri.parse("content:///path/to/your.apk"),
"application/vnd.android.package-archive");
startActivity(promptInstall);
veya
Intent goToMarket = new Intent(Intent.ACTION_VIEW)
.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.package.name"));
startActivity(goToMarket);
Ancak, kullanıcının açık izni olmadan .apks yükleyemezsiniz; cihaz ve programınız root edilmediği sürece.
Daha derine indim ve Android Source'dan PackageInstaller uygulamasının kaynaklarını buldum.
https://github.com/android/platform_packages_apps_packageinstaller
Manifestodan bunun izin gerektirdiğini öğrendim:
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
Ve asıl kurulum süreci onaylandıktan sonra gerçekleşir
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);
Evet bu mümkün. Ancak bunun için telefona doğrulanmamış kaynaklar yüklemeniz gerekir. Örneğin, slideMe bunu yapar. Bence yapabileceğiniz en iyi şey, uygulamanın mevcut olup olmadığını kontrol etmek ve Android Market için bir niyet göndermektir. android Market için url şeması gibi bir şey kullanmalısınız.
market://details?id=package.name
Etkinliği nasıl başlatacağımı tam olarak bilmiyorum ama bu tür bir url ile bir etkinlik başlatırsanız. Android marketi açmalı ve size uygulamaları yükleme seçeneği sunmalıdır.