Estoy intentando instalar aplicaciones de Google Play. Puedo entender que al abrir la URL de la tienda Google Play, se abre Google Play y cuando presiono el botón Atrás, la actividad se reanuda.
Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(appURL));
marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(marketIntent);
Cuando volví a la actividad, intenté llamar a esto onResume()
para verificar si la aplicación está instalada, pero recibo un error:
@Override
protected void onResume() {
super.onResume();
boolean installed = false;
while (!installed) {
installed = appInstalledOrNot(APPPACKAGE);
if (installed) {
Toast.makeText(this, "App installed", Toast.LENGTH_SHORT).show();
}
}
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
boolean app_installed = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
app_installed = true;
}
catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed ;
}
El error es el siguiente:
E / AndroidRuntime (796): java.lang.RuntimeException: No se puede iniciar la actividad ComponentInfo {com.example.appinstaller / com.example.appinstaller.MainActivity}: android.content.ActivityNotFoundException: No se encontró actividad para manejar Intent {act = android .intent.action.VIEW dat = market: // details? id = com.package.name flg = 0x40080000}
Supongo que la actividad lo es onPause()
. ¿Existe una mejor manera de implementarlo? Estoy intentando comprobar si la aplicación ha terminado de instalarse.
fuente
Respuestas:
Prueba esto:
Intenta obtener información sobre el paquete cuyo nombre ingresó. De lo contrario, si
NameNotFoundException
se lanzó un, significa que no se instaló ningún paquete con ese nombre, por lo que regresamosfalse
.Tenga en cuenta que pasamos a en
PackageManager
lugar de aContext
, por lo que el método es un poco más flexible y no viola la ley de Demeter . Puede usar el método sin acceso a unaContext
instancia, siempre que tenga unaPackageManager
instancia.Úselo así:
fuente
La respuesta de Robin Kanters es correcta, pero verifica las aplicaciones instaladas independientemente de su estado habilitado o deshabilitado.
Todos sabemos que una aplicación puede ser instalada pero deshabilitada por el usuario, por lo tanto, inutilizable.
Esto verifica las aplicaciones instaladas Y habilitadas:
Puede poner este método en una clase como
Utils
y llamarlo en todas partes usando:fuente
Prueba esto:
fuente
Solución más rápida:
getPackageGids
es menos costosogetPackageInfo
, por lo que funciona más rápido.Nota: esto no funcionará en algunos espacios virtuales. Pueden violar la API de Android y siempre devolver una matriz, incluso si no hay una aplicación con ese nombre de paquete.
En este caso, utilice
getPackageInfo
.fuente
fuente
// método para verificar el paquete instalado verdadero / falso
fuente
Si desea probarlo sin el bloque try catch, puede usar el siguiente método, crear una intención y configurar el paquete de la aplicación que desea verificar
y llame al siguiente método para verificar si la aplicación está instalada
fuente
Aquellos que buscan la solución Kotlin pueden utilizar este método,
Aquí he compartido el código completo y también manejé el estado habilitado. Compruebe si la aplicación está instalada en Android Kotlin
fuente
fuente