publicclassMainActivityextendsAppCompatActivity{@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);// Add respective layout
setContentView(R.layout.main_activity);// Use package name which we want to checkboolean isAppInstalled = appInstalledOrNot("com.check.application");if(isAppInstalled){//This intent will help you to launch if the package is already installedIntentLaunchIntent= getPackageManager().getLaunchIntentForPackage("com.check.application");
startActivity(LaunchIntent);Log.i("Application is already installed.");}else{// Do whatever we want to do if application not installed// For example, Redirect to play storeLog.i("Application is not currently installed.");}}privateboolean appInstalledOrNot(String uri){PackageManager pm = getPackageManager();try{
pm.getPackageInfo(uri,PackageManager.GET_ACTIVITIES);returntrue;}catch(PackageManager.NameNotFoundException e){}returnfalse;}}
@Sathish: Mam nadzieję, że to może być pomocne dla Ciebie
Aerrow,
1
Bez wątpienia Twój post jest naprawdę pomocny, ale otrzymuję wyjątek „java.lang.RuntimeException: Nie udało się dodać okna” i „E / AndroidRuntime (7554): Spowodowany przez: android.os.TransactionTooLargeException 05-14 11: 37: 25.305 : E / AndroidRuntime (7554): na android.os.BinderProxy.transact (metoda natywna) 05-14 11: 37: 25.305: E / AndroidRuntime (7554): na android.view.IWindowSession $ Stub $ Proxy.add (IWindowSession .java: 516) 05-14 11: 37: 25.305: E / AndroidRuntime (7554): w android.view.ViewRootImpl.setView (ViewRootImpl.java:494) ”
DJhon
2
@BlueGreen: Cześć, mam nadzieję, że ten link może ci pomóc, stackoverflow.com/questions/11451393/… , w przeciwnym razie, jeśli używasz klasy Dialog, uprzejmie sprawdź to. :)
Aerrow
1
@Aerrow .. Załóżmy, że sprawdzam, czy moja aplikacja .apk jest zainstalowana, czy nie? w czasie instalacji ... Otrzymuję ten sam wyjątek podczas sprawdzania mojego pakietu com.test.installedornot.Mój plik .apk ma więcej niż 9 MB, to w takim przypadku jak sobie poradzę z tym wyjątkiem?
DJhon
@BlueGreen: Powyższy kod sprawdzi tylko zainstalowaną aplikację, w momencie instalacji to nie będzie działać. W swoim przypadku użyj odbiornika transmisji, aby otrzymać powiadomienie po zainstalowaniu tego apk.
Aerrow
65
Nieco czystsze rozwiązanie niż przyjęta odpowiedź (na podstawie tego pytania ):
Ta odpowiedź pokazuje, jak pobrać aplikację ze Sklepu Play, jeśli brakuje aplikacji, ale należy zachować ostrożność na urządzeniach, które nie mają Sklepu Play.
Sprawdź, czy aplikacja jest zainstalowana lub nie w systemie Android za pomocą kotlin.
Tworzenie rozszerzenia kotlin.
fun PackageManager.isAppInstalled(packageName:String):Boolean=try{
getApplicationInfo(packageName,PackageManager.GET_META_DATA)true}catch(e:Exception){false}
Teraz możesz sprawdzić, czy aplikacja jest zainstalowana, czy nie
if(packageManager.isAppInstalled("AppPackageName")){// App is installed}else{// App is not installed}
Ten kod służy do sprawdzania, czy aplikacja z nazwą pakietu jest zainstalowana lub nie, jeśli nie, otworzy link do sklepu playstore Twojej aplikacji, w przeciwnym razie zainstalowana aplikacja
String your_apppackagename="com.app.testing";PackageManager packageManager = getPackageManager();ApplicationInfo applicationInfo =null;try{
applicationInfo = packageManager.getApplicationInfo(your_apppackagename,0);}catch(PackageManager.NameNotFoundException e){
e.printStackTrace();}if(applicationInfo ==null){// not installed it will open your app directly on playstore
startActivity(newIntent(Intent.ACTION_VIEW,Uri.parse("https://play.google.com/store/apps/details?id="+ your_apppackagename)));}else{// InstalledIntentLaunchIntent= packageManager.getLaunchIntentForPackage(your_apppackagename);
startActivity(LaunchIntent);}
private fun isAppInstalled(context:Context, uri:String):Boolean{
val packageInfoList = context.packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES)return packageInfoList.asSequence().filter { it?.packageName == uri }.any()}
Wszystkie odpowiedzi tylko sprawdzają, czy dana aplikacja jest zainstalowana, czy nie. Ale, jak wszyscy wiemy, aplikacja może być zainstalowana, ale wyłączona przez użytkownika, bezużyteczna.
Dlatego to rozwiązanie sprawdza oba. tj. zainstalowane i włączone aplikacje .
Odpowiedzi:
Spróbuj z tym:
źródło
Nieco czystsze rozwiązanie niż przyjęta odpowiedź (na podstawie tego pytania ):
Zdecydowałem się umieścić go w klasie pomocniczej jako statyczne narzędzie. Przykład użycia:
Ta odpowiedź pokazuje, jak pobrać aplikację ze Sklepu Play, jeśli brakuje aplikacji, ale należy zachować ostrożność na urządzeniach, które nie mają Sklepu Play.
źródło
Powyższy kod nie działa dla mnie. Następujące podejście zadziałało.
Utwórz obiekt intencji z odpowiednimi informacjami, a następnie sprawdź, czy intencja jest wywoływalna, czy nie, używając następującej funkcji:
źródło
if
stwierdzeń! To zdecydowanie właściwa odpowiedźIntent intent = getPackageManager().getLaunchIntentForPackage("org.package.name");
Jeśli znasz nazwę pakietu, działa to bez użycia bloku try-catch lub iteracji przez kilka pakietów:
źródło
return !list.isEmpty();
byłoby bardziej przyjazne w stylu javaTen kod sprawdza, czy aplikacja jest zainstalowana, ale także sprawdza, czy jest włączona.
źródło
Myślę, że użycie wzorca try / catch nie jest dobre dla wydajności. Radzę skorzystać z tego:
źródło
Czystsze rozwiązanie (bez try-catch) niż akceptowana odpowiedź (oparta na bibliotece AndroidRate ):
źródło
Tworzenie rozszerzenia kotlin.
Teraz możesz sprawdzić, czy aplikacja jest zainstalowana, czy nie
źródło
Spróbuj tego
źródło
Prostsza implementacja za pomocą Kotlina
I nazwij to tak (szukając aplikacji Spotify):
źródło
@Egemen Hamutçu s odpowiedź w kotlin B-)
źródło
Wszystkie odpowiedzi tylko sprawdzają, czy dana aplikacja jest zainstalowana, czy nie. Ale, jak wszyscy wiemy, aplikacja może być zainstalowana, ale wyłączona przez użytkownika, bezużyteczna.
Dlatego to rozwiązanie sprawdza oba. tj. zainstalowane i włączone aplikacje .
Wywołaj metodę
isPackageInstalled()
:Teraz użyj zmiennej boolowskiej
isAppInstalled
i rób, co chcesz.źródło
Fajna odpowiedź na inne problemy. Jeśli nie chcesz na przykład rozróżniać „com.myapp.debug” i „com.myapp.release”!
źródło
Tak ładniej z Kotlin suger:
źródło