Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot determine whether Google play store is installed or not on Android device

This was a simple matter of checking the installed packages on the device... before I've upgraded my OS to 2.3.5, I could locate the Market/Play store, using this code:

private static final String GooglePlayStorePackageName = "com.google.market";

void someMethod() {
    packageManager = getApplication().getPackageManager();
    List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
    for (PackageInfo packageInfo : packages) {
        if (packageInfo.packageName.equals(GooglePlayStorePackageName)) {
            googlePlayStoreInstalled = true;
            break;
        }
    }
}

For some reason after the update, I simply cannot find the to package name to indicate the application is installed, although it is on the device, and I can access the market.

Has the package name changed? or perhaps I'm looking at this the wrong way?

Thanks,

Adam.

UPDATE:

That was a stupid way to check if a package is installed... a better way is:

protected final boolean isPackageInstalled(String packageName) {
    try {
        application.getPackageManager().getPackageInfo(packageName, 0);
    } catch (NameNotFoundException e) {
        return false;
    }
    return true;
}
like image 837
TacB0sS Avatar asked May 11 '12 12:05

TacB0sS


People also ask

Why is Play Store not installed?

Google Play Store is a native (pre-installed) application. This can not be un-installed. If it goes missing on your apps page, check if it disabled or hidden. You can do this by Opening Settings > Apps > Google Play Store.

Why is my Google Play Store not working on my Android?

The Google Play Store can stop working or start showing unresponsive behaviors. The reason could be either the service is down, or could be an OS or app-specific issue. Clearing cache, restarting device or updating app are some of the common fixes to resolve the issue.


3 Answers

Be aware that this almost 5 years old code is not optimal and Google does not like when you check all installed packages without no good reason. Please check also the other answers.

The package name has changed, it is now com.android.vending


Try:

private static final String GooglePlayStorePackageNameOld = "com.google.market";
private static final String GooglePlayStorePackageNameNew = "com.android.vending";

void someMethod() {
    PackageManager packageManager = getApplication().getPackageManager();
    List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
    for (PackageInfo packageInfo : packages) {
        if (packageInfo.packageName.equals(GooglePlayStorePackageNameOld) ||
            packageInfo.packageName.equals(GooglePlayStorePackageNameNew)) {
            googlePlayStoreInstalled = true;
            break;
        }
    }
}
like image 153
ScouseChris Avatar answered Sep 30 '22 04:09

ScouseChris


GooglePlayServices has a utility class with a method to handle this:

isGooglePlayServicesAvailable(Context).

It provides appropriate error dialogs for the status of play services on the device.

API Reference:

GoogleApiAvailability.isGooglePlayServicesAvailable(android.content.Context)

like image 27
saiyancoder Avatar answered Sep 30 '22 03:09

saiyancoder


As Michael stated in the comments Google Play Services is not the same as the Google Play Store. Use this to determine whether or not the Play Store is installed on your device:

public static boolean isPlayStoreInstalled(Context context){
    try {
        context.getPackageManager()
                .getPackageInfo(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE, 0);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}
like image 33
MrMaffen Avatar answered Sep 30 '22 05:09

MrMaffen