2012-05-11 21 views
15

To była prosta sprawa sprawdzenia zainstalowanych pakietów na urządzeniu ... zanim uaktualniłem mój system operacyjny do wersji 2.3.5, mogłem zlokalizować rynek/sklep Play, przy użyciu tego kodu:Nie można ustalić, czy sklep Google Play jest zainstalowany, czy nie, na urządzeniu z Androidem

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

z jakiegoś powodu po aktualizacji, po prostu nie mogę znaleźć nazwę pakietu do wskazania aplikacja jest zainstalowana, mimo że jest w urządzeniu i mogę wejść na rynek.

Czy zmieniono nazwę pakietu? czy może patrzę na to w niewłaściwy sposób?

Dzięki,

Adam.

UPDATE:

To był głupi sposób, aby sprawdzić, czy jest zainstalowany pakiet ... lepszym sposobem jest:

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

Powyższy kod działa perfekcyjnie ... thanx – pioneerBhawna

Odpowiedz

31

Należy pamiętać, że to prawie 5 lat jest stary kod nie jest optymalna, a Google nie lubi, gdy sprawdzasz wszystkie zainstalowane pakiety bez ważnego powodu. Sprawdź również inne odpowiedzi.

Nazwa pakietu nie zmieniło, to jest teraz com.android.vending


Spróbuj:

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

Oznacza to, że teraz muszę sprawdzić istnienie obu aplikacjach ... Hmm ... nie bardzo dobrze! – TacB0sS

+2

Ale dlaczego używasz flagi 'PackageManager.GET_UNINSTALLED_PACKAGES' w' getInstalledPackages() ', a nie tylko' getInstalledPackages (0) '? – Prizoff

+6

Nawiasem mówiąc, nie "com.google.vending" ', ale' "com.android.vending" '. Nie jestem pewien co do starej nazwy. – Prizoff

9

GooglePlayServices ma klasę użytkową do obsługi tego, a także zapewnić przywłaszczył dialogi o błędzie do pokaż zgodnie ze stanem usług odtwarzania w urządzeniu.

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

+1

To jest bardzo niedawno ... Mam zamiar przetestować go w ciągu najbliższych kilku dni ... jak dotąd kod wygląda jak jeden wielki bałagan! – TacB0sS

+0

To rzeczywiście! Ale cóż, to jest to, do czego Google się przyzwyczaił :) – saiyancoder

+4

Należy zauważyć, że programiści nie powinni mylić aplikacji sklepu Google Play i usługi Google Play. GooglePlayServicesUtil.isGooglePlayServicesAvailable() sprawdza dla tego ostatniego, który może być wskaźnikiem, ale nie wymaganiem. Jednakże klasa ma stałe dla obu nazw pakietów. IMHO, jeśli chcesz sprawdzić istniejącą aplikację sklepu Google Play (np. Ponieważ chcesz uruchomić intencję market: //, użyj menedżera pakietów z GOOGLE_PLAY_STORE_PACKAGE.) – Michael

0

Używając tego kodu, można sprawdzić Usługi Google Play są zainstalowane w urządzeniu, czy nie.

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

Google Play Service! = Sklep Google Play. Możesz zainstalować ten sklep, ale nie GPS i OP o to sklep. – Michael

4

Jak Michael stwierdził w komentarzach Usługi Google Play to nie to samo, co Sklep Google Play. Użyj tego, aby ustalić, czy w Sklepie Play jest zainstalowana na urządzeniu:

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

Pamiętaj, że to wymaga dodania polecenia "com.google.android.gms: play- services-base: $ playServicesVersion' do twoich zależności. (Nie tworzy zależności w zależności od instalowanych Usług Play). – Thomas

+0

@Thomas, niepotrzebny możesz zastąpić GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE przez "com.android.vending " –

0

W większości przypadków chcemy się dowiedzieć, czy Google Play Store jest zainstalowany, czy nie uruchomić go z jakiejś strony aplikacji zainstalowanych fabrycznie.

Dlaczego nie możemy zrobić:

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. 
} 
Powiązane problemy