Hemos instalado aplicaciones mediante programación.
- Si la aplicación ya está instalada en el dispositivo, la aplicación se abre automáticamente.
- De lo contrario, instale la aplicación particular.
Guíame. No tengo idea. Gracias.
Hemos instalado aplicaciones mediante programación.
Guíame. No tengo idea. Gracias.
Respuestas:
Prueba con esto:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Add respective layout
setContentView(R.layout.main_activity);
// Use package name which we want to check
boolean isAppInstalled = appInstalledOrNot("com.check.application");
if(isAppInstalled) {
//This intent will help you to launch if the package is already installed
Intent LaunchIntent = 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 store
Log.i("Application is not currently installed.");
}
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
}
return false;
}
}
Solución algo más limpia que la respuesta aceptada (basada en esta pregunta ):
public static boolean isAppInstalled(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Elegí ponerlo en una clase auxiliar como una utilidad estática. Ejemplo de uso:
boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");
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.
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:
private boolean isCallable(Intent intent) {
List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
if
declaraciones! Esta es definitivamente la respuesta correcta
Intent 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:
public static boolean isPackageInstalled(Context context, String packageName) {
final PackageManager packageManager = context.getPackageManager();
Intent intent = packageManager.getLaunchIntentForPackage(packageName);
if (intent == null) {
return false;
}
List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
return !list.isEmpty();
}
return !list.isEmpty();
sería más amigable con el estilo java
Este código verifica que la aplicación esté instalada, pero también verifica que esté habilitada.
private boolean isAppInstalled(String packageName) {
PackageManager pm = getPackageManager();
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return pm.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return false;
}
}
Creo que usar el patrón try / catch no es muy bueno para el rendimiento. Aconsejo usar esto:
public static boolean appInstalledOrNot(Context context, String uri) {
PackageManager pm = context.getPackageManager();
List<PackageInfo> packageInfoList = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
if (packageInfoList != null) {
for (PackageInfo packageInfo : packageInfoList) {
String packageName = packageInfo.packageName;
if (packageName != null && packageName.equals(uri)) {
return true;
}
}
}
return false;
}
Solución más limpia (sin try-catch) que la respuesta aceptada (basada en AndroidRate Library ):
public static boolean isPackageExists(@NonNull final Context context, @NonNull final String targetPackage) {
List<ApplicationInfo> packages = context.getPackageManager().getInstalledApplications(0);
for (ApplicationInfo packageInfo : packages) {
if (targetPackage.equals(packageInfo.packageName)) {
return true;
}
}
return false;
}
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(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + your_apppackagename)));
} else {
// Installed
Intent LaunchIntent = packageManager.getLaunchIntentForPackage(your_apppackagename);
startActivity( LaunchIntent );
}
Una implementación más simple usando Kotlin
fun PackageManager.isAppInstalled(packageName: String): Boolean =
getInstalledApplications(PackageManager.GET_META_DATA)
.firstOrNull { it.packageName == packageName } != null
Y llámalo así (buscando la aplicación Spotify):
packageManager.isAppInstalled("com.spotify.music")
Respuesta de @Egemen Hamutçu en kotlin B-)
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 .
public static boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
return packageManager.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Llama al método isPackageInstalled()
:
boolean isAppInstalled = isPackageInstalled("com.android.app" , this.getPackageManager());
Ahora, usa la variable booleana isAppInstalled
y haz lo que quieras.
if(isAppInstalled ) {
/* do whatever you want */
}
Una buena respuesta a otros problemas. ¡Si no quiere diferenciar "com.myapp.debug" y "com.myapp.release", por ejemplo!
public static boolean isAppInstalled(final Context context, final String packageName) {
final List<ApplicationInfo> appsInfo = context.getPackageManager().getInstalledApplications(0);
for (final ApplicationInfo appInfo : appsInfo) {
if (appInfo.packageName.contains(packageName)) return true;
}
return false;
}