2012-05-11 4 views
15

Dies war eine einfache Frage der Überprüfung der installierten Pakete auf dem Gerät ... bevor ich mein Betriebssystem auf 2.3.5 aktualisiert habe, konnte ich den Markt finden Play Store, mit diesem Code:Kann nicht feststellen, ob Google Play Store auf Android-Gerät installiert ist oder nicht

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; 
     } 
    } 
} 

Aus irgendeinem Grunde nach dem Update, ich kann einfach nicht finden, den Namen zu verpacken, die Anwendung, um anzuzeigen, installiert ist, obwohl es auf dem Gerät ist, und ich kann den Markt gelangen.

Wurde der Paketname geändert? oder vielleicht sehe ich das falsch an?

Danke,

Adam.

UPDATE:

, dass eine dumme Art und Weise, wenn ein Paket zu überprüfen, war installiert ist ... ein besserer Weg ist:

protected final boolean isPackageInstalled(String packageName) { 
    try { 
     application.getPackageManager().getPackageInfo(packageName, 0); 
    } catch (NameNotFoundException e) { 
     return false; 
    } 
    return true; 
} 
+0

Above-Code ist völlig in Ordnung arbeiten ... thanx – pioneerBhawna

Antwort

31

Beachten Sie, dass diese fast 5 Jahre alten Code ist nicht optimal und Google mag es nicht, wenn Sie alle installierten Pakete ohne triftigen Grund überprüfen. Bitte überprüfen Sie auch die anderen Antworten.

Der Paketname geändert hat, wird es jetzt com.android.vending


Versuchen:

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; 
     } 
    } 
} 
+0

Das bedeutet, dass jetzt muss ich für die Existenz beider Anwendungen überprüfen ... Hmm ... nicht Sehr schön! – TacB0sS

+2

Aber warum verwenden Sie Flag 'PackageManager.GET_UNINSTALLED_PACKAGES' in' getInstalledPackages() 'und nicht nur' getInstalledPackages (0) '? – Prizoff

+6

Übrigens, nicht "com.google.vending", sondern "com.android.vending" '. Ich bin mir nicht sicher über den alten Namen. – Prizoff

9

GooglePlayServices hat eine Utility-Klasse zu handhaben und bieten Dialoge auch eigneten Fehler Zeigen Sie entsprechend dem Status der Spieldienste im Gerät an.

API-Referenz:http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesUtil.html

+1

Dies ist sehr neu ... Ich werde es in den nächsten Tagen testen ... bis jetzt sieht der Code wie ein großes Durcheinander aus! – TacB0sS

+0

Es ist in der Tat! Aber gut, ist das, was Google gewohnt ist :) – saiyancoder

+4

Beachten Sie, dass Entwickler die Google Play Store App und Google Play Service nicht verwechseln sollten. GooglePlayServicesUtil.isGooglePlayServicesAvailable() prüft auf die letzte, die zwar ein Indikator, aber keine Voraussetzung ist. Die Klasse hat jedoch Konstanten für beide Paketnamen. IMHO, wenn Sie nach einer bestehenden Google Play Store App suchen möchten (zB weil Sie eine market: // intent starten möchten, verwenden Sie den PackageManager mit GOOGLE_PLAY_STORE_PACKAGE. – Michael

0

diesen Code verwenden, können Sie überprüfen Google Play-Dienste sind auf dem Gerät installiert ist oder nicht.

int val=GooglePlayServicesUtil.isGooglePlayServicesAvailable(MainActivity.this); 
      if(val==ConnectionResult.SUCCESS) 
      { 
       play_installed=true; 
      } 
      else 
      { 
       play_installed=false; 
      } 
+4

Google Play-Dienst! = Google Play Store. Sie können den Store aber nicht GPS und umgekehrt installieren lassen. Das OP hat nach dem Store gefragt. – Michael

4

Wie Michael in den Kommentaren sagte Google Play Services ist nicht das gleiche wie der Google Play Store. Verwenden Sie diese Option, um zu bestimmen, ob das Play Store auf Ihrem Gerät installiert ist:

public static boolean isPlayStoreInstalled(Context context){ 
    try { 
     context.getPackageManager() 
       .getPackageInfo(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE, 0); 
     return true; 
    } catch (PackageManager.NameNotFoundException e) { 
     return false; 
    } 
} 
+1

Beachten Sie, dass dazu 'com.google.android.gms: play- services-base: $ playServicesVersion "zu Ihren Abhängigkeiten. (Es erzeugt keine Laufzeitabhängigkeit von den installierten Play Services.) – Thomas

+0

@Thomas, nicht notwendig. Sie können GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE durch" com.android.vending " –

0

In den meisten Fällen wir herausfinden wollen, ob Google Play Store installiert ist oder nicht starten Sie es mit einigen App-Seite vorbelastet.

Warum kann man wie folgt vorgehen:

final String appPackageName = getPackageName(); // get your app package name 
try { 
    Uri uri = Uri.parse("market://details?id=" + appPackageName); 
    startActivity(new Intent(Intent.ACTION_VIEW, uri)); 
} catch (android.content.ActivityNotFoundException anfe) { 
    // Google Play Store is not available. 
} 
Verwandte Themen