Installer l'Application par programmation sur Android
Je suis intéressé à savoir si il est possible d'installer par programme dynamique téléchargé l'apk d'une coutume de l'application Android.
- Je ne sais pas ce que "chargeur dynamique, dépend de l'utilisateur actuel de l'environnement" signifie. La réponse fournie par @Mensonge Ryan montre comment vous pouvez installer un APK téléchargé par quelque moyen que ce soit que vous choisissez.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez facilement lancer un play store lien ou une invite pour l'installation:
ou
Cependant, vous ne pouvez pas installer .apk sans que l'utilisateur autorisation explicite; non, sauf si l'appareil et votre programme est enracinée.
/sdcard
, puisque c'est le mal sur Android 2.2+ et d'autres appareils. UtilisationEnvironment.getExternalStorageDirectory()
à la place.J'ai eu le même problème et après plusieurs tentatives, il a travaillé pour moi de cette façon. Je ne sais pas pourquoi, mais les données de réglage et le type séparément foiré mon intention.
setData()
serait provoquer le type de paramètre à être supprimé. Vous DEVEZ utilisersetDataAndType()
si vous voulez donner des valeurs pour les deux. Ici: developer.android.com/reference/android/content/...Les solutions apportées à cette question sont toutes applicables à
targetSdkVersion
s de 23 et ci-dessous. Pour Android N, c'est à dire de l'API de niveau 24, et au-dessus, cependant, ils ne travaillent pas et crash avec l'Exception suivante:Cela est dû au fait qu'à partir de Android 24, le
Uri
pour traiter le fichier téléchargé a changé. Par exemple, un fichier d'installation nomméappName.apk
stockées sur le primaire externe du système de fichiers de l'application avec le nom du packagecom.example.test
serait commefile:///storage/emulated/0/Android/data/com.example.test/files/appName.apk
pour
API 23
et ci-dessous, alors que quelque chose commepour
API 24
et au-dessus.Plus de détails sur ce qui peut être trouvé ici et je ne vais pas aller à travers elle.
Répondre à la question pour
targetSdkVersion
de24
et au-dessus, on a qu'à suivre ces étapes:Ajouter les éléments suivants à l'AndroidManifest.xml:
2. Ajouter le suivant
paths.xml
fichier à laxml
dossier surres
de la src, principal:La
pathName
est indiqué dans l'exemplaire de contenu uri exemple ci-dessus etpathValue
est le chemin d'accès réel sur le système.Ce serait une bonne idée de mettre un "." (sans les guillemets) pour pathValue dans le ci-dessus si vous ne voulez pas ajouter supplémentaire de la sous-répertoire.
Écrire le code suivant pour installer l'apk avec le nom
appName.apk
sur la principale externe du système de fichiers:Pas d'autorisation est également nécessaire lors de l'écriture de votre propre application d'annuaire privé externe sur le système de fichiers.
J'ai écrit une mise à jour automatique de la bibliothèque ici dans lequel j'ai utilisé ci-dessus.
.authorityStr
aprèscontext.getPackageName()
alors il devrait fonctionner.Bien, j'ai creusé plus profond, et a trouvé des sources de PackageInstaller application à partir de la Source Android.
https://github.com/android/platform_packages_apps_packageinstaller
De manifester, j'ai trouvé que c'besoin de la permission:
Et le processus réel de l'installation se produit après confirmation de
Je veux juste partager le fait que mon fichier apk a été sauvé mon app du répertoire "Data" et que j'avais besoin de changer les permissions sur le fichier apk pour être lisible par tout le monde afin de lui permettre d'être installé de cette façon, sinon, le système a été lancer "Parse error: Il y a un Problème de l'Analyse du Package"; donc, en utilisant la solution de @Horaceman qui donne:
Oui c'est possible. Mais pour cela vous avez besoin du téléphone pour installer les sources non vérifiées. Par exemple, slideMe le fait. Je pense que la meilleure chose que vous pouvez faire est de vérifier si la demande est présente et envoyer une intention de l'Android Market. vous devriez utiliser quelque chose que le schéma d'url pour l'android Market.
Je ne sais pas exactement comment démarrer l'activité, mais si vous commencez une activité avec ce type d'url. Il devrait ouvrir le marché android et vous donner le choix d'installer l'application.
Il est intéressant de noter que si vous utilisez le
DownloadManager
pour lancer votre téléchargement, assurez-vous de l'enregistrer sur un emplacement externe par exemplesetDestinationInExternalFilesDir(c, null, "<your name here>).apk";
. L'intention avec un paquet-type d'archive n'apparaît pas comme lecontent:
schéma utilisé avec les téléchargements à un lieu interne, mais ne commefile:
. (Essayer d'envelopper le chemin de l'intérieur dans un Fichier objet, puis obtenir le chemin d'accès ne fonctionne pas non plus, même s'il en résulte unfile:
url, comme l'application ne sont pas analyser le apk; regarde comme il doit être externe.)Exemple:
Une autre solution qui ne nécessite pas de coder en dur l'application réceptrice et qui est donc plus sûr:
Juste une extension, si quelqu'un à besoin d'une bibliothèque, puis cette pourrait aider. Grâce à Raghav
essayer cette
Cela peut aider d'autres personnes beaucoup!
Première:
Deuxième: Pour android 7 et ci-dessus, vous devez définir un fournisseur de manifester comme ci-dessous!
Troisième: Définir path.xml dans res/xml dossier comme ci-dessous!
Je suis en utilisant ce chemin pour le stockage interne si vous voulez le changer pour quelque chose d'autre il y a un peu de chemin! Vous pouvez aller sur ce lien:
FileProvider
De suite: Vous devez ajouter cette autorisation dans le manifeste:
UpdateNode fournit une API pour Android pour installer APK forfaits à partir de l'intérieur d'une autre Application.
Il vous suffit de définir votre mise à Jour en ligne et d'intégrer l'API dans votre Application - que c'est.
Actuellement, l'API est en Beta, mais vous pouvez déjà faire quelques tests vous-même.
A côté de cela, UpdateNode propose également l'affichage des messages via le système - très utile si vous voulez dire quelque chose d'important à vos utilisateurs.
Je suis partie de la client dev team et je suis en utilisant au moins la fonctionnalité de message pour mon Application Android.
Voir ici une description de la manière d'intégrer l'API
D'abord ajouter la ligne suivante AndroidManifest.xml :
Alors utiliser le code suivant pour installer les apk:
Ne pas oublier de demander des autorisations:
Ajouter dans AndroidManifest.xml le fournisseur et l'autorisation:
Créer le fichier XML de fournisseur res/xml/provider_paths.xml
Utilisation ci-dessous un exemple de code:
Essayer cette
- Écrire sur le Manifeste:
Écrire le Code: