Try this:
private boolean isPackageInstalled(String packageName, PackageManager packageManager) {
try {
packageManager.getPackageInfo(packageName, 0);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
Note!
From Android 11 (API 30), you might need to declare <queries> in your manifest, depending on what package you’re looking for. Check out the docs for more info.
How it works:
It attempts to fetch information about the package whose name you passed in. Failing that, if a NameNotFoundException was thrown, it means that no package with that name is installed, so we return false.
Note that we pass in a PackageManager instead of a Context, so that the method is slightly more flexibly usable and doesn’t violate the law of Demeter. You can use the method without access to a Context instance, as long as you have a PackageManager instance.
How to use:
public void someMethod() {
// ...
PackageManager pm = context.getPackageManager();
boolean isInstalled = isPackageInstalled("com.somepackage.name", pm);
// ...
}