2011-09-20 12 views

Odpowiedz

8

Istnieją dwa sposoby. Możesz użyć już wymienionych getPackageManager() i getApplicationInfo() (jeśli pakiet nie zostanie znaleziony, zostanie wyrzucony PacketManager.NameNotFoundException - patrz here). Nazwa pakietu Android Market to com.android.vending.

Można jednak również utworzyć atrapowy zamiar wyszukiwania na rynku i sprawdzić, jak jest on obsługiwany. Jeśli uzyskany lista ma co najmniej jeden wpis, można mieć pewność, że jest zainstalowany Android Market:

Intent market = new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=dummy")); 
PackageManager manager = getPackageManager(); 
List<ResolveInfo> list = manager.queryIntentActivities(mmarket, 0); 
+0

Czy „com.android.vending "także nazwa pakietu na urządzeniach Honeycomb (lub nowszych), w których używana jest aplikacja" MyApps "? Sprawdzanie intencji "market: //" jest niewiarygodne, ponieważ inne aplikacje rynkowe również tego używają. –

+0

Nie mogę powiedzieć na pewno, jeśli chodzi o com.android.vending i Honeycomb. Jednak programiści aplikacji dla systemu Android odwołują się do com.android.vending bez żadnych notatek specyficznych dla Honeycomb (np .: http://developer.android.com/guide/publishing/licensing.html), więc zakładam, że działa zgodnie z oczekiwaniami. – ernes7a

+1

W Kindle Fire, Amazon App Store zareaguje na rynek: // URI. –

1

Oto co zrobiłem (zakłada przeglądarka istnieje):

Intent market = new Intent(Intent.ACTION_VIEW).setData(Uri 
     .parse("market://details?id=com.example.app")); 


Intent website = new Intent(Intent.ACTION_VIEW).setData(Uri 
     .parse("http://play.google.com/store/apps/details?id=com.example.app")); 

try { 

    startActivity(market); 

} catch (ActivityNotFoundException e) { 

    startActivity(website); 

} 
Powiązane problemy