¿Como hacer que se abra la PlayStore si una app no esta instalada? – java android

Pregunta:


Estoy tratando de que el código detecte si una app esta instalada en el telefono y si lo esta entonces que se abra, si no lo esta entonces abrir la PlayStore o mas bien que busque la app para que se descargue.

public void open8 (View view){

    if(InstaladaAplicacion("com.example.speedometer", getApplicationContext())){

    }else{
        Uri uri = Uri.parse("http://play.google.com/");
        Intent i = new Intent(Intent.ACTION_VIEW, uri);
        startActivity(i);

    }

    String PackageName = "com.example.speedometer";
    Intent intent = getPackageManager().getLaunchIntentForPackage("com.example.speedometer");

    if(intent == null) {

    }
    startActivity(intent);

}

private boolean InstaladaAplicacion(String s, Context applicationContext) {
    return false;
}

Intenté con esto para ver si funciona y creo que si detecta que la app esta instalada pero no estoy seguro del todo, entonces al tenerla instalada la abre, borré la app para probar si abre la PlayStore y resulta que no(La app se detiene).

Preguntado por: Alejandro Matos

El método para detectar si la aplicación se encuentra instalada en el dispositivo a partir de su packagename, sería:

public static boolean instaladaAplicacion(String packagename, Context context) {
    boolean response = false;
    try {
        context.getPackageManager().getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
        response = true;
    } catch (PackageManager.NameNotFoundException e) {
        Log.i("Android", "NNFE aplicación no instalada: " + e.getMessage());
    }
    return response;
}

Por lo tanto, primeramente buscas si la aplicación definida por su packagename, se encuentra instalada. Si se encuentra instalada la abre en el dispositivo.

Si no se encuentra instalada abre la aplicación en Google Playstore para que el usuario la instalé, en este caso necesitas formar la url con el protocolo market://.

Este sería el código:

    String packageName = "com.example.speedometer";
    String MARKET_SQUEME = "market://details?id=";

    //Verifica si la aplicación se encuentra instalada.
    if(instaladaAplicacion(packageName, getApplicationContext())){
        Intent i = getPackageManager().getLaunchIntentForPackage(packageName);
        i.addCategory(Intent.CATEGORY_LAUNCHER);            
        //Abre aplicación.
        startActivity(i); 
    }else{ //No se encuentra instalada.
        //Abre aplicación en  Playstore
        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(MARKET_SQUEME + packageName)));
    }

Como complemento a la respuesta de @Jorgesys

Me he encontrado que no siempre los enlaces market://details?id=: abren la app Google play correctamente, por ejemplo en mi Moto G funciona, pero en mi Acer Liquid z200 no funciona.

Suelo usar más https://play.google.com/store/apps/details?id= que si la app google play está instalada se muestra para abrirla con ella sino con el navegador.

Si se quiere contemplar diferentes escenarios si el usuario tiene instalada la Google Play o bien como alternativa abre el navegador.

private String getGooglePlayStoreUrl(){
    String id = activity.getApplicationInfo().packageName; // current google play is   using package name as id

    PackageManager packageManager = activity.getApplicationContext().getPackageManager();
    Uri marketUri = Uri.parse("market://details?id=" + id);
    Intent marketIntent = new Intent(Intent.ACTION_VIEW).setData(marketUri);
    if (marketIntent.resolveActivity(packageManager) != null)
      return "market://details?id=" + id;
    else
      return "https://play.google.com/store/apps/details?id=" + id;
 }

Fuente

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *