android - modificar - como editar un pdf en el celular
Cómo instalar aplicaciones mediante programación sin abrir Play Store(como lo hace Google Drive) (4)
Hoy, la aplicación Google Drive me preguntó si quería instalar las nuevas aplicaciones, Hojas de cálculo y Documentos.
Acepté, esperando que abriera Google Play Store para poder presionar Instalar.
No fue así . Simplemente me mostró la ventana emergente con los permisos de cada una de las aplicaciones para confirmar la instalación, la misma que aparece cuando presiona "Instalar" en cualquier aplicación de Play Store.
No sabía que esto podría hacerse.
¿Cómo podemos reproducir este comportamiento en una aplicación? ¿Tiene un botón "Instalar la aplicación XPTO" que no necesita abrir Google Play Store? ¿Solo muestra el cuadro de diálogo de permisos y procede a instalarlo a través de Play Store?
ACTUALIZAR:
Para aquellos que votan negativamente porque piensan que esto es lo mismo que otras preguntas ... ¡No lo es!
En este caso, la aplicación Google Drive no descarga el APK y luego lo instala. Google Drive " le dice " a Play Store que se descargue e instale.
Esa es la API que me interesa.
Para respaldar mi caso: después de presionar INSIDE Google Drive para instalar las aplicaciones sin abrir Play Store, comienza la descarga . Durante la descarga, abrí Play Store para verificar y:
La captura de pantalla demuestra que Google Drive no descarga el APK ni lo instala. Es la Play Store.
Diría que Google Drive tiene permisos de sistema, al igual que Play Store. Probablemente porque está firmado con la firma de Google.
Si logras tener el permiso "android.permission.INSTALL_PACKAGES" puedes llamar a la API (que no está incluida en el android.jar implementado por SDK Manager, tienes que obtener las API ocultas de android.jar en el emulador para instancia) para instalar las aplicaciones.
Entonces, básicamente, a menos que tenga permisos del sistema (al poner su APK en / system / app, firmado con certificado OEM o con root) no podrá hacerlo.
Fuente: Ya programamos algunas aplicaciones del sistema
--- ACTUALIZAR
Por supuesto, Play Store puede tener alguna puerta que pueda usar para instalar cualquier aplicación, pero que probablemente requiera permisos que no puede obtener por su cuenta.
Google+ ahora implementa botones donde puedes descargar directamente una aplicación (ver este enlace ) sin hacer clic en el botón en el sitio de Play Store.
El enlace se ve así: https://play.google.com/store/apps/details?id=com.example.app&rdid=com.example.app&rdot=1&feature=md
Si agrega el parámetro rdid, rdot y feature funciona en mi teléfono (si lo escribo en el navegador, no se prueba con un intento y no se prueba para actualizar una aplicación, solo lo instalo).
Editar :
Descubrí que solo necesitas agregar el parámetro rdid a la url. Fuente: http://www.androidb.com/2014/04/increase-app-installs-with-a-single-trick/
Edit2:
No funciona con un intento. :(
Los registros de Google Drive muestran que la actividad responsable de "decirle" a Google Play Store que instale aplicaciones es
com.google.android.apps.docs/com.google.android.apps.docs.app.PhoneskyApplicationInstallerActivity
que, aparentemente, "dice"
com.android.vending/com.google.android.finsky.billing.lightpurchase.LightPurchaseFlowActivity
para instalar los paquetes requeridos
Entonces, teóricamente, uno podría crear un intento
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);
con valores extra correctos y voilà!
Sin embargo, está LightPurchaseFlowActivity
invocación de LightPurchaseFlowActivity
desde una aplicación que no está firmada por Google, porque aparentemente, de nuevo (según los registros), verifica la firma del paquete que realiza la llamada:
W/Finsky(13209): [1] LightPurchaseFlowActivity.setupFromExternalPurchaseIntent: Called from untrusted package.
Entonces, allí, esto no se puede lograr en este momento.
Si sabe dónde tiene el archivo apk, puede hacerlo fácilmente.
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);