Uygulamalar sessizce, verilen İNSTALL_PACKAGES izni ile
Sessizce sisteme muayene yüklemeye çalışıyorum. Benim uygulaması ve başarılı bir şekilde verilen /sistem/uygulama izni "android.yer almaktadır izni.". İNSTALL_PACKAGES
Ancak bu izni kullanmak için nasıl hiçbir yerde bulamıyorum. /Data/app kopyalamak için denedim ve başarılı oldu. Ayrıca bu kodu kullanarak denedim
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(
Uri.parse("file:///sdcard/app.apk"),
"application/vnd.android.package-archive");
startActivity(intent);
Ama bu kod standart yükleme iletişim kutusu açar. Sessizce nasıl kök olmadan android.permission.INSTALL_PACKAGES
verilen uygulama yükleyebilir miyim?
PS ilk başlangıç Kurulum Sihirbazı replace () sistem klasöründen birçok apks yüklemek olacak bir uygulama yazıyorum. Bu ürün yazılımı daha hafif yapmak istiyorum.
Eğer bir virüs yazıyorum düşünüyorsanız: Tüm Programlar /data/app içine yüklenir. İzin İnstall_packages sadece sistem düzeyinde programlar /sistem/yer veya sistem anahtarı ile imzalı bir uygulama verilebilir. Virüs oraya gidemem.
http://www.mail-archive.com/android-porting@googlegroups.com/msg06281.html uygulamalar eğer install_packages iznine sahip oldukları için sessiz kurulabilir. " dedi. Ayrıca İnstall_packages paketleri sessizce yüklemek için izin gerekmez. Artı http://www.androidzoom.com/android_applications/tools/silent-installer_wgqi.html
CEVAP
İlk bahis Android yerel PackageInstaller içine bakmak. İstediğiniz şekilde uygulama, ya da sadece özü işlevselliği gerektiren değiştirmeyi öneriyoruz.
Eğer PackageInstallerActivity ve yöntemi onClickListener
içine bakarsanız özellikle:
public void onClick(View v) {
if(v == mOk) {
// Start subactivity to actually install the application
Intent newIntent = new Intent();
...
newIntent.setClass(this, InstallAppProgress.class);
...
startActivity(newIntent);
finish();
} else if(v == mCancel) {
// Cancel and finish
finish();
}
}
O zaman gerçek yükleyici InstallAppProgress sınıfında yer olduğunu fark edeceksiniz. Bu sınıf teftiş initView
çekirdek yükleyici işlev ve son bir şey PackageManager
çağrı'installPackage
s fonksiyonu . olduğunu göreceksiniz
public void initView() {
...
pm.installPackage(mPackageURI, observer, installFlags, installerPackageName);
}
Bir sonraki adım, soyut sınıf olan PackageManager, incelemek için. installPackage(...)
fonksiyon bulabilirsiniz. Kötü haber @gizle işaretli olmasıdır. Bu doğrudan kullanılabilir (bu yöntemi çağrısı ile derlemek mümkün olmayacaktır) değil demektir.
/**
* @hide
* ....
*/
public abstract void installPackage(Uri packageURI,
IPackageInstallObserver observer,
int flags,String installerPackageName);
Ama yansıma yoluyla bu yöntemleri erişmek mümkün olacak.
PackageManager
nasıl ilgilendi'installPackage
fonksiyon nın uygulanması, PackageManagerService bir göz atın.
Özet
Context
ile Paket Yöneticisi nesnesi'17* s *. almak gerekir Sonra installPackage
yansıtma) işlevini çağırın.
Uyarı: Verilen faaliyet izni gerektirm...
Verilen hizmet izni gerektirmez: bu ne...
numaralandırma türleri için Ad - en iy...
Uygulamalar uygulama başlatma sonunda ...
Ne iyi SmtpClient, SendAsync kullanara...