Jak programowo sprawdzić, czy aplikacja jest zainstalowana, czy nie w Androidzie?

Mamy zainstalowane aplikacje programowo.

  1. Jeśli aplikacja jest już zainstalowana w urządzeniu, aplikacja zostanie otwarta automatycznie.
  2. w przeciwnym razie zainstaluj konkretną aplikację.

Prowadź Mnie. Nie mam pojęcia. Dzięki.

 124
Author: Jonik, 0000-00-00

3 answers

Spróbuj z tym:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Add respective layout
        setContentView(R.layout.main_activity);

        // Use package name which we want to check
        boolean isAppInstalled = appInstalledOrNot("com.check.application");  

        if(isAppInstalled) {
            //This intent will help you to launch if the package is already installed
            Intent LaunchIntent = 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 store

            Log.i("Application is not currently installed.");
        }
    }

    private boolean appInstalledOrNot(String uri) {
        PackageManager pm = getPackageManager();
        try {
            pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
            return true;
        } catch (PackageManager.NameNotFoundException e) {
        }

        return false;
    }

}
 278
Author: Aerrow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-04 14:07:28

Nieco czystsze rozwiązanie niż przyjęta odpowiedź (na podstawie tego pytania):

public static boolean isAppInstalled(Context context, String packageName) {
    try {
        context.getPackageManager().getApplicationInfo(packageName, 0);
        return true;
    }
    catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}
Zdecydowałem się umieścić go w klasie pomocniczej jako statyczne narzędzie. Przykład użycia:
boolean whatsappFound = AndroidUtils.isAppInstalled(context, "com.whatsapp");

Ta odpowiedź pokazuje, jak uzyskać aplikację ze Sklepu Play, jeśli brakuje aplikacji, chociaż należy zachować ostrożność na urządzeniach, które nie mają Sklepu Play.

 50
Author: Jonik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-15 11:46:33

Powyższy kod nie działał dla mnie. Poniższe podejście zadziałało.

Utwórz obiekt Intent z odpowiednimi informacjami, a następnie sprawdź, czy Intent można wywołać, czy nie za pomocą następującej funkcji:

private boolean isCallable(Intent intent) {  
        List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent,   
        PackageManager.MATCH_DEFAULT_ONLY);  
        return list.size() > 0;  
}
 22
Author: Priyank Desai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-29 20:55:38