programacion - ¿Cómo puedo encontrar si un paquete en particular existe en mi dispositivo Android?
manual de programacion android pdf (6)
¿Cómo puedo saber si existe un paquete o aplicación en particular, por ejemplo: com.android.abc
, en mi dispositivo Android?
Como algunos dispositivos informaron que los "getInstalledPackages" pueden causar TransactionTooLargeException (marque here , here y here ), creo que también debería tener una alternativa como la que hice a continuación.
Se suponía que este problema se había solucionado en Android 5.1 (leer here ), pero algunos aún informaron al respecto.
public static List<String> getInstalledPackages(final Context context) {
List<String> result = new ArrayList<>();
final PackageManager pm = context.getPackageManager();
try {
List<PackageInfo> apps = pm.getInstalledPackages(0);
for (PackageInfo packageInfo : apps)
result.add(packageInfo.packageName);
return result;
} catch (Exception ignored) {
//we don''t care why it didn''t succeed. We''ll do it using an alternative way instead
}
// use fallback:
BufferedReader bufferedReader = null;
try {
Process process = Runtime.getRuntime().exec("pm list packages");
bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = bufferedReader.readLine()) != null) {
final String packageName = line.substring(line.indexOf('':'') + 1);
result.add(packageName);
}
closeQuietly(bufferedReader);
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
} finally {
closeQuietly(bufferedReader);
}
return result;
}
public static void closeQuietly(final Closeable closeable) {
if (closeable == null)
return;
try {
closeable.close();
} catch (final IOException e) {
}
}
Debe usar la función de PackageManager
llamada getInstalledPackages()
para obtener la lista de todos los paquetes instalados y la búsqueda de la que le interesa. Tenga en cuenta que el nombre del paquete se encuentra en el campo PackageInfo.packageName
.
Llame cualquiera de los siguientes métodos con el nombre del paquete.
import android.content.pm.PackageManager;
// ...
public boolean isPackageExisted(String targetPackage){
List<ApplicationInfo> packages;
PackageManager pm;
pm = getPackageManager();
packages = pm.getInstalledApplications(0);
for (ApplicationInfo packageInfo : packages) {
if(packageInfo.packageName.equals(targetPackage))
return true;
}
return false;
}
import android.content.pm.PackageManager;
public boolean isPackageExisted(String targetPackage){
PackageManager pm=getPackageManager();
try {
PackageInfo info=pm.getPackageInfo(targetPackage,PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
return false;
}
return true;
}
Si solo quieres usar adb:
adb shell "pm list packages"|cut -f 2 -d ":"
enumerará todos los paquetes instalados.
Sin usar un bloque try-catch o iterar a través de un grupo 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.size() > 0;
}
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;