publicclassMainActivityextendsAppCompatActivity{@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);// Add respective layout
setContentView(R.layout.main_activity);// Use package name which we want to checkboolean isAppInstalled = appInstalledOrNot("com.check.application");if(isAppInstalled){//This intent will help you to launch if the package is already installedIntentLaunchIntent= getPackageManager().getLaunchIntentForPackage("com.check.application");
startActivity(LaunchIntent);Log.i("Application is already installed.");}else{// Do whatever we want to do if application not installed// For example, Redirect to play storeLog.i("Application is not currently installed.");}}privateboolean appInstalledOrNot(String uri){PackageManager pm = getPackageManager();try{
pm.getPackageInfo(uri,PackageManager.GET_ACTIVITIES);returntrue;}catch(PackageManager.NameNotFoundException e){}returnfalse;}}
Sin duda, su publicación es realmente útil, pero recibo una excepción "java.lang.RuntimeException: Error al agregar ventana" y "E / AndroidRuntime (7554): Causado por: android.os.TransactionTooLargeException 05-14 11: 37: 25.305 : E / AndroidRuntime (7554): en android.os.BinderProxy.transact (Método nativo) 05-14 11: 37: 25.305: E / AndroidRuntime (7554): en android.view.IWindowSession $ Stub $ Proxy.add (IWindowSession .java: 516) 05-14 11: 37: 25.305: E / AndroidRuntime (7554): en android.view.ViewRootImpl.setView (ViewRootImpl.java:494) "
DJhon
2
@BlueGreen: Hola, espero que este enlace te pueda ayudar, stackoverflow.com/questions/11451393/… , de lo contrario, si estás usando Dialog Class, por favor, compruébalo. :)
Aerrow
1
@Aerrow ... ¿Y si estoy comprobando que mi .apk está instalado o no? en el momento de la instalación ... Recibo la misma excepción al verificar mi paquete com.test.installedornot.Mi tamaño de .apk es más de 9 MB, en ese caso, ¿cómo manejaré esta excepción?
DJhon
@BlueGreen: el código anterior verificará solo la aplicación instalada; en el momento de la instalación, esto no funcionará. Para su caso, use el receptor Broadcast para obtener la notificación después de instalar ese apk.
Aerrow
65
Solución algo más limpia que la respuesta aceptada (basada en esta pregunta ):
Esta respuesta muestra cómo obtener la aplicación de Play Store si falta la aplicación, aunque se debe tener cuidado en los dispositivos que no tienen Play Store.
La aplicación Check está instalada o no en Android usando kotlin.
Creando la extensión de Kotlin.
fun PackageManager.isAppInstalled(packageName:String):Boolean=try{
getApplicationInfo(packageName,PackageManager.GET_META_DATA)true}catch(e:Exception){false}
Ahora, puede verificar si la aplicación está instalada o no
if(packageManager.isAppInstalled("AppPackageName")){// App is installed}else{// App is not installed}
Este código se usa para verificar si su aplicación con el nombre del paquete está instalado o no; si no, se abrirá el enlace de Play Store de su aplicación; de lo contrario, su aplicación instalada
String your_apppackagename="com.app.testing";PackageManager packageManager = getPackageManager();ApplicationInfo applicationInfo =null;try{
applicationInfo = packageManager.getApplicationInfo(your_apppackagename,0);}catch(PackageManager.NameNotFoundException e){
e.printStackTrace();}if(applicationInfo ==null){// not installed it will open your app directly on playstore
startActivity(newIntent(Intent.ACTION_VIEW,Uri.parse("https://play.google.com/store/apps/details?id="+ your_apppackagename)));}else{// InstalledIntentLaunchIntent= packageManager.getLaunchIntentForPackage(your_apppackagename);
startActivity(LaunchIntent);}
private fun isAppInstalled(context:Context, uri:String):Boolean{
val packageInfoList = context.packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES)return packageInfoList.asSequence().filter { it?.packageName == uri }.any()}
Todas las respuestas solo comprueban que cierta aplicación está instalada o no. Pero, como todos sabemos, el usuario puede instalar una aplicación pero deshabilitarla, inutilizable.
Por lo tanto, esta solución verifica ambos. es decir, aplicaciones instaladas y habilitadas .
Respuestas:
Prueba con esto:
fuente
Solución algo más limpia que la respuesta aceptada (basada en esta pregunta ):
Elegí ponerlo en una clase auxiliar como una utilidad estática. Ejemplo de uso:
Esta respuesta muestra cómo obtener la aplicación de Play Store si falta la aplicación, aunque se debe tener cuidado en los dispositivos que no tienen Play Store.
fuente
El código anterior no funcionó para mí. El siguiente enfoque funcionó.
Cree un objeto Intent con la información adecuada y luego verifique si el Intent es invocable o no utiliza la siguiente función:
fuente
if
declaraciones! Esta es definitivamente la respuesta correctaIntent intent = getPackageManager().getLaunchIntentForPackage("org.package.name");
Si conoce el nombre del paquete, esto funciona sin usar un bloque try-catch o iterar a través de un montón de paquetes:
fuente
return !list.isEmpty();
sería más amigable con el estilo javaEste código verifica que la aplicación esté instalada, pero también verifica que esté habilitada.
fuente
Creo que usar el patrón try / catch no es muy bueno para el rendimiento. Aconsejo usar esto:
fuente
Solución más limpia (sin try-catch) que la respuesta aceptada (basada en AndroidRate Library ):
fuente
Creando la extensión de Kotlin.
Ahora, puede verificar si la aplicación está instalada o no
fuente
Prueba esto
fuente
Una implementación más simple usando Kotlin
Y llámalo así (buscando la aplicación Spotify):
fuente
Respuesta de @Egemen Hamutçu en kotlin B-)
fuente
Todas las respuestas solo comprueban que cierta aplicación está instalada o no. Pero, como todos sabemos, el usuario puede instalar una aplicación pero deshabilitarla, inutilizable.
Por lo tanto, esta solución verifica ambos. es decir, aplicaciones instaladas y habilitadas .
Llama al método
isPackageInstalled()
:Ahora, usa la variable booleana
isAppInstalled
y haz lo que quieras.fuente
Una buena respuesta a otros problemas. ¡Si no quiere diferenciar "com.myapp.debug" y "com.myapp.release", por ejemplo!
fuente
Tan amable con Kotlin suger:
fuente