Wie kann ich feststellen, ob com.android.abc
auf meinem Android-Gerät ein bestimmtes Paket oder eine bestimmte Anwendung vorhanden ist?
71
Wie kann ich feststellen, ob com.android.abc
auf meinem Android-Gerät ein bestimmtes Paket oder eine bestimmte Anwendung vorhanden ist?
Rufen Sie eine der folgenden Methoden mit dem Paketnamen auf.
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;
}
cannot resolve symbol 'PackageManager'
Fehler.Ohne einen Try-Catch-Block zu verwenden oder eine Reihe von Paketen zu durchlaufen:
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; }
quelle
Kotlin
fun isPackageExist(context: Context, target: String): Boolean { return context.packageManager.getInstalledApplications(0).find { info -> info.packageName == target } != null }
quelle
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;
quelle
Sie sollten die
PackageManager
aufgerufene Funktion verwendengetInstalledPackages()
, um die Liste aller installierten Pakete abzurufen und nach dem zu suchen, an dem Sie interessiert sind. Beachten Sie, dass sich der Paketname imPackageInfo.packageName
Feld befindet.quelle
Wenn Sie nur adb verwenden möchten:
adb shell "pm list packages"|cut -f 2 -d ":"
Es werden alle installierten Pakete aufgelistet.
quelle
Sie können pm.getPackageUid () verwenden, anstatt über pm.getInstalledApplications () zu iterieren.
boolean isPackageInstalled; PackageManager pm = getPackageManager(); int flags = 0; try { pm.getPackageUid(packageName,flags); isPackageInstalled = true; } catch (final PackageManager.NameNotFoundException nnfe) { isPackageInstalled = false; } return isPackageInstalled;
quelle
Da einige Geräte gemeldet haben, dass "getInstalledPackages" eine TransactionTooLargeException verursachen kann (siehe hier , hier und hier ), sollten Sie auch einen Fallback haben, wie ich es unten getan habe.
Dieses Problem sollte auf Android 5.1 behoben werden (lesen Sie hier ), aber einige berichteten immer noch darüber.
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) { } }
quelle
Wir können dies überprüfen:
if(getPackageManager().hasSystemFeature("android.software.webview") == true && isPackageExisted("com.google.android.webview")) { if (Constant.isNetworkConnected(Activity.this)) { //Your Intent } else { Toast.makeText(getApplicationContext(), resources.getString(R.string.internet_error), Toast.LENGTH_SHORT).show(); } } else { Constant.showDialog(Activity.this,"Please install the webview"); } }
Methode zur Paketprüfung machen! Dieses Guthaben geht an "Kavi" https://stackoverflow.com/a/30708227/6209105
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;
}}
quelle