Mai mult
Instala Aplicația programatic pe Android
Am'm a interesat în a ști dacă este posibil să se programatic de a instala un mod dinamic descărcat apk dintr-o aplicație Android personalizat.
199
15
Puteți lansa cu ușurință un magazin play link sau o instala prompt:
sau
Cu toate acestea, nu se poate instala .fișiere apk fără de utilizator's permisiunea explicită; nu excepția cazului în care dispozitivul și programul dvs. este înrădăcinată.
Am avut aceeași problemă și, după mai multe încercări, ea a lucrat pentru mine în acest fel. Eu nu't știu de ce, dar setarea de date și de tip în parte greșit intenția mea.
Soluțiile oferite la această întrebare sunt aplicabile `targetSdkVersion modelului de 23 de ani și de mai jos. Pentru Android N, adică API de nivel 24, și mai sus, cu toate acestea, ele nu funcționează și se prăbuși, cu următoarea Excepție:
Acest lucru se datorează faptului că, începând Android 24,
Uri
pentru abordarea fișierul descărcat-au schimbat. De exemplu, un fișier de instalare numitappName.apk
stocate pe extern principal sistem de fișiere a aplicației cu pachetul numecom.exemplu.test
ar fi la fel defile:///depozitare/emulat/0/Android/date/com.exemplu.test/files/appName.apk
pentru API 23` și mai jos, întrucât ceva de genul
pentru API 24` și mai sus.
Mai multe detalii despre aceasta pot fi găsite aici și nu am de gând să du-te prin ea.
Pentru a răspunde la întrebarea pentru targetSdkVersion` de " 24 " și de mai sus, trebuie să urmați acești pași: Adăugați următoarele la AndroidManifest.xml:
paths.xml
dosarulxml
folder de pe " res " în src, principale:<?xml version="1.0" encoding="utf-8"?> <căi xmlns:android="http://schemas.android.com/apk/res/android"> <extern-calea nume="cale" calea="pathValue"/> </căi>
Pe
cale
este cea prezentată în exemplul de conținutul uri exemplu de mai sus șipathValue
este calea reală pe sistemul. Ar fi o idee bună pentru a pune o "." (fără ghilimele) pentru pathValue în cele de mai sus, dacă nu doriți să adăugați orice suplimentare subdirector.Directorul de fișiere = context.getExternalFilesDir(null); File = new File(director, fileName); Uri fileUri = Uri.fromFile(fișier); dacă (a Construi.VERSIUNE.SDK_INT >= 24) { fileUri = FileProvider.getUriForFile(contextul, contextul.getPackageName(), fișier); } Intenție intenție = new intenție(Intenție.ACTION_VIEW, fileUri); intenție.putExtra(Intenție.EXTRA_NOT_UNKNOWN_SOURCE, true); intenție.setDataAndType(fileUri, "application/vnd.android" + ".pachet-arhiva"); intenție.setFlags(Intenție.FLAG_ACTIVITY_CLEAR_TASK | Intenție.FLAG_ACTIVITY_NEW_TASK); intenție.addFlags(Intenție.FLAG_GRANT_READ_URI_PERMISSION); context.startActivity(intenție); activitate.sosire();
Permisiunea este, de asemenea, necesară atunci când scris la propria aplicație's privată director de pe extern sistem de fișiere.
Am scris un AutoUpdate biblioteca aici în care l-am folosit mai sus.
Ei bine, am săpat mai adânc, și-a găsit surse de PackageInstaller aplicația de la Android Sursă.
https://github.com/android/platform_packages_apps_packageinstaller
De vădită am constatat că este nevoie de permisiunea:
Și procesul efectiv de instalare are loc după confirmarea
Vreau doar să împărtășesc faptul că mi apk fișier a fost salvat în aplicația mea "de Date" director și că am nevoie pentru a schimba permisiunile pentru fișierul apk pentru a fi ușor de citit, în scopul de a permite ca acesta să fie instalat acel mod, în caz contrar sistemul a fost aruncat "eroare de analiză: Există o Problemă de Analiză Pachetul"; deci, folosind soluție de @Horaceman asta face:
Acest lucru poate ajuta la ceilalți o mulțime!
În primul rând:
În al doilea rând: Pentru android de 7 și de mai sus ar trebui să definească un furnizor în manifest ca de mai jos!
În al treilea rând: Definirea path.xml în res/xml folder ca de mai jos! Am'm a utiliza această calea pentru stocare intern, dacă doriți să-l schimbe cu altceva există câteva drum! Puteți merge la acest link: FileProvider
Mai departe: ar trebui să adăugați această permisiune în manifest:
O altă soluție pe care nu't nu necesita hard-cod primirea app și că, prin urmare, este mai sigur:
Da's posibil. Dar pentru asta ai nevoie de telefon pentru a instala surse neverificate. De exemplu, slideMe face asta. Cred că cel mai bun lucru care le puteți face este de a verifica dacă cererea este prezent și trimite o intenție pentru Android Market. ar trebui să utilizați ceva de schema url pentru android Market.
Eu nu't știu exact cum să-și înceapă activitatea, dar dacă ai începe o activitate cu acest tip de url-ul. Acesta ar trebui să deschidă android market și oferă posibilitatea de a instala aplicații.
L's de remarcat faptul că, dacă utilizați
DownloadManager
pentru a lovi cu piciorul off descărca, asigurați-vă că să-l salvați într-o locație externă, de exemplusetDestinationInExternalFilesDir(c, null, "<numele tău aici>).apk";
. Intenția cu un pachet de tip arhivă nu't par a caconținut:
sistem folosit cu descărcări interne locație, dar nu cafile:
. (Încearcă să-și încheie cale internă într-un Fișier obiect și apoi obtinerea calea nu't de lucru, fie, chiar dacă rezultatele într-un fișier:` url, ca aplicație a câștigat't analiza apk; se pare că trebuie să fie extern.)Exemplu:
încercați acest lucru
Doar o extensie, dacă cineva avea nevoie de o bibliotecă, apoi acest ar putea ajuta. Datorită Raghav
UpdateNode oferă un API pentru Android pentru a instala APK pachete de într-o altă Aplicație.
Puteți defini dvs. de Actualizare on-line și de a integra API în App - asta's a.
În prezent, API este în stare Beta, dar deja puteți face unele teste de tine.
Pe lângă faptul că, UpdateNode oferă, de asemenea, afișarea de mesaje deși sistemul - destul de util dacă vrei să spui ceva important pentru utilizatori.
Eu fac parte dintre client dev team și sunt, folosind cel puțin un mesaj de funcționalitate pentru propria mea Aplicație Android.
Vezi aici o descriere cum pentru a integra API
Mai întâi, adăugați următoarea linie în AndroidManifest.xml :
Apoi, utilizați următorul cod pentru a instala apk:
Nu uita pentru a solicita permisiuni:
Adaugă în AndroidManifest.xml furnizorul și permisiunea:
Creați fișier XML furnizor res/xml/provider_paths.xml
Folosesc de mai jos exemplu de cod:
Încercați acest lucru
uses-permission android:name="android.permisiunea.INSTALL_PACKAGES" instrumente:ignore="ProtectedPermissions"
Scrie Codul: