SORU
27 NİSAN 2011, ÇARŞAMBA


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
27 NİSAN 2011, ÇARŞAMBA


İ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.

PackageManagernasıl ilgilendi'installPackage fonksiyon nın uygulanması, PackageManagerService bir göz atın.

Özet

Contextile Paket Yöneticisi nesnesi'17* s *. almak gerekir Sonra installPackage yansıtma) işlevini çağırın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • jkimisyellow...ish

    jkimisyellow

    8 Temmuz 2009
  • psidot

    psidot

    2 Kasım 2006
  • SoundHound

    SoundHound

    8 Mart 2006