2012-05-11 17 views
15

Questa era una semplice questione di controllare i pacchetti installati sul dispositivo ... prima che avessi aggiornato il mio sistema operativo in 2.3.5, avrei potuto individuare il Mercato/Play Store, utilizzando questo codice:Impossibile determinare se il Play Store di Google è installato o meno sul dispositivo Android

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

per qualche ragione dopo l'aggiornamento, semplicemente non riesco a trovare il nome al pacchetto per indicare l'applicazione è installata, anche se è sul dispositivo, e posso accedere al mercato.

Il nome del pacchetto è cambiato? o forse sto guardando questo nel modo sbagliato?

Grazie,

Adam.

UPDATE:

E 'stato un modo stupido per verificare se è stato installato un pacchetto ... un modo migliore è:

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

Sopra codice funziona perfettamente bene ... Grazie – pioneerBhawna

risposta

31

essere consapevoli che questo quasi 5 anni vecchio codice è non ottimale e Google non piace quando controlli tutti i pacchetti installati senza una buona ragione. Si prega di controllare anche le altre risposte.

Il nome del pacchetto è cambiato, è ora com.android.vending


Prova:

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

Ciò significa che ora devo verificare l'esistenza di entrambe le applicazioni ... Hmm ... non molto bella! – TacB0sS

+2

Ma perché usi flag 'PackageManager.GET_UNINSTALLED_PACKAGES' in' getInstalledPackages() 'e non solo' getInstalledPackages (0) '? – Prizoff

+6

A proposito, non '" com.google.vending "', ma '" com.android.vending "'. Non sono sicuro del vecchio nome. – Prizoff

9

GooglePlayServices ha una classe di utilità per gestire questa situazione e di fornire anche le finestre di dialogo di errore assegnare alle mostra in base allo stato dei servizi di riproduzione nel dispositivo.

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

+1

Questo è molto recente ... Sto per testarlo nei prossimi giorni ... finora il codice sembra un gran casino! – TacB0sS

+0

È davvero! Ma bene, è ciò che Google è abituato a fare :) – saiyancoder

+4

Si noti che gli sviluppatori non devono confondere l'app Google Play Store e il servizio Google Play. GooglePlayServicesUtil.isGooglePlayServicesAvailable() controlla quest'ultimo, che potrebbe essere un indicatore ma non un requisito. La classe ha costanti per entrambi i nomi dei pacchetti, però. IMHO, se vuoi controllare un'app di Google Play Store esistente (ad es. Perché vuoi lanciare un mercato: // intento, usa il PackageManager con GOOGLE_PLAY_STORE_PACKAGE. – Michael

0

Utilizzando questo codice, è possibile controllare Google Play Services sono installati sul vostro dispositivo o meno.

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

Google Play Service! = Google Play Store È possibile avere installato il negozio ma non il GPS e viceversa. L'OP chiedeva il negozio – Michael

4

Come ha dichiarato Michael nei commenti, Google Play Services non è lo stesso del Google Play Store. Usare questo per determinare se il Play Store viene installato sul dispositivo:

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

Si noti che è necessario aggiungere 'com.google.android.gms: play- servizi-base: $ playServicesVersion' alle dipendenze. (Non crea una dipendenza in fase di esecuzione su Play Services in fase di installazione.) – Thomas

+0

@Thomas, non necessario. puoi sostituire GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE con "com.android.vending " –

0

In maggior parte dei casi si vuole scoprire se Google Play Store è installato o non lanciare con qualche pagina app precaricata.

Perchè non lo facciamo:

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. 
} 
Problemi correlati