54 votes

Comment installer des applications par programme sans ouvrir Play Store (comme le fait Google Drive)

Aujourd'hui, l'application Google Drive demandé si je voulais installer les nouvelles applications de Feuilles & Docs.

J'ai accepté, en espérant que cela ouvrez Google Play Store afin que je puisse appuyez sur installer.

Il n'a pas. Il vient juste de me montrer le popup avec les autorisations de chacune des applications pour confirmer l'installation, le même qui apparaît lorsque vous appuyez sur "Installer" sur n'importe quelle application sur le Play Store.

Je n'étais pas au courant de ce qui pourrait être fait.

Comment peut-on reproduire ce comportement dans une application: avoir un bouton "Installer l'Application XPTO" qui n'a pas besoin pour ouvrir Google Play Store? Affiche la boîte de dialogue autorisations et des produits de l'installer via le Play Store?


Mise à JOUR:

Pour ceux downvoting parce qu'ils pensent que c'est le même que d'autres questions... Il n'est pas!

Dans ce cas, l'APK n'est pas téléchargé par application Google Drive, puis installé. Google Drive "dit" Play Store pour télécharger et installer.

C'est l'API qui je suis intéressé.

À l'appui de mon cas: après la pression à l'INTÉRIEUR de Google Drive pour installer les apps sans ouvrir le Play Store, le téléchargement commence. Pendant le téléchargement, j'ai ouvert le Play Store pour vérifier et:

enter image description here

La capture d'écran qui prouve que ce n'est pas Google Drive télécharger l'APK et l'installer. C'est le Magasin de Jeu.

53voto

shoe rat Points 6700

Les journaux de Google Drive montre que l'activité du responsable pour "raconter" le Google Play Store pour installer des applications est

com.google.android.apps.docs/com.google.android.apps.docs.app.PhoneskyApplicationInstallerActivity

qui, apparemment, "raconte"

com.android.vending/com.google.android.finsky.billing.lightpurchase.LightPurchaseFlowActivity

pour installer les paquets requis.

Donc, théoriquement, on pourrait créer une intention

Intent intent = new Intent("com.android.vending.billing.PURCHASE");
intent.setClassName("com.android.vending",
        "com.google.android.finsky.billing.lightpurchase.LightPurchaseFlowActivity");
intent.putExtra(EXTRA_NAME, EXTRA_VALUE);
startActivityForResult(intent, 0);

avec de corriger les valeurs et voilà!

Cependant, appelant LightPurchaseFlowActivity de non-application signée Google est un échec, parce qu'ils sont, de nouveau, apparemment (selon les journaux), la vérification de l'appel de l'ensemble de la signature:

W/Finsky(13209): [1] LightPurchaseFlowActivity.setupFromExternalPurchaseIntent: Called from untrusted package.

Donc, il y a, cela ne peut pas être atteint à ce moment.

6voto

Manu Points 3546

Google+ met en pratique les boutons où vous pouvez directement télécharger une application (voir ce lien) sans cliquer sur le bouton sur le play store site.

Le lien ressemble à ceci: https://play.google.com/store/apps/details?id=com.example.app&rdid=com.example.app&rdot=1&feature=md

Si vous ajoutez le rdid, rdot et de la fonction paramètre il fonctionne sur mon téléphone (si je tape dans le navigateur, pas testé avec une intention et non pas testé de mettre à jour une application, seulement l'installation).

Edit:

J'ai découvert que vous devez seulement ajouter de la rdid-paramètre de l'url. Source: http://www.androidb.com/2014/04/increase-app-installs-with-a-single-trick/

Edit2:

Ne fonctionne pas avec une intention. :(

3voto

Miguel Ribeiro Points 1440

Je dirais que le Google Drive a les autorisations du système, tout comme le Play Store. Probablement parce qu'il est signé avec Google signature.

Si vous avez réussi à avoir le "android.la permission.INSTALL_PACKAGES" la permission, vous pouvez appeler l'API (qui n'est pas inclus dans le android.jar déployé par SDK Manager, vous avez pour obtenir le caché Api à partir de la android.jar dans l'émulateur par exemple) pour installer les applications.

Donc, en gros, sauf si vous avez les autorisations du système (en mettant votre APK dans /system/app, signé avec l'OEM certificat ou avec racine), vous ne serez pas en mesure de le faire.

Source: Déjà programmé quelques applications système

--- Mise à JOUR

Bien sûr, le magasin de jeu peut avoir une porte que vous pouvez utiliser pour installer n'importe quelle application, mais qui nécessite probablement une des autorisations que vous ne pouvez pas obtenir sur votre propre

-1voto

Jota Points 44

Si vous savez où vous avez le fichier apk, vous pouvez facilement.

 File file = new File(dir, "YourApp.apk");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
startActivity(intent);
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X