¿Cómo distinguir el Hangout de Google Talk App?

Desde mi aplicación, quiero ejecutar Hangouts y desde esa aplicación los usuarios pueden crear videollamadas.
Sin embargo, en algunos dispositivos de destino los usuarios tienen una aplicación nativa de Google Talk (no se actualiza a Hangouts).

El problema es: Google Talk y Hangouts: son las mismas aplicaciones con el mismo nombre de paquete com.google.android.talk , y no sé cómo distinguirlos.

Mi lógica: cuando encontré el paquete en el dispositivo – Acabo de ejecutar la aplicación. Si no – página de mercado abierto con esta aplicación.

Tal vez alguien sabe, ¿cómo distinguir hangout de google talk app?

Mi código:

 public void startApplication(String packageName){ try { Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(intent, 0); for(ResolveInfo info : resolveInfoList) if(info.activityInfo.packageName.equalsIgnoreCase(packageName)) { launchComponent(info.activityInfo.packageName, info.activityInfo.name); return; } showInMarket(packageName); } catch (Exception e) { showInMarket(packageName); } } private void launchComponent(String packageName, String name){ Intent intent = new Intent("android.intent.action.MAIN"); intent.addCategory("android.intent.category.LAUNCHER"); intent.setComponent(new ComponentName(packageName, name)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } private void showInMarket(String packageName){ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + packageName)); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } 

UPD

Ahora sólo tengo una idea: para comprobar si el publicSourceDir es /system/app/Talk.apk – si "sí" – tenemos la aplicación "Google Talk" preestablecida, pero no creo que esta sea una buena solución.
¿Qué te parece?

 String publicSourceDir = getPackageManager() .getPackageInfo(info.activityInfo.packageName, 0).applicationInfo.publicSourceDir; if(!publicSourceDir.toLowerCase().endsWith(GOOGLE_HANGOUT_SYSTEM_APK.toLowerCase())){ ...... } 

    La comprobación de la ruta de instalación dejó de funcionar cuando Google comenzó a enviar dispositivos con hangouts instalados en la parte ROM. Supongo que la original Nexus 5 ROM incluye la nueva aplicación de Hangouts en la ROM. Se instalarán más actualizaciones en el espacio de usuario.

    De todos modos, la comprobación de permiso android.permission.SEND_SMS debe hacer el truco. No tengo ningún dispositivo con buen viejo Google Talk para probar. Pero supongo que no tiene este permiso.

     private boolean isHangoutsInstalled(final Context context) { PackageManager pm = context.getPackageManager(); assert pm != null; // check for bable aka hangouts app try { if (pm.getApplicationInfo("com.google.android.apps.babel", 0) != null) { return true; } } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, "babel not found, check for talk app"); } // check for talk app or updated talk app now known as hangouts try { if (pm.getApplicationInfo("com.google.android.talk", 0) == null) { // no talk, no update return false; } } catch (PackageManager.NameNotFoundException e) { Log.e(TAG, "talk app not found"); // no talk, no update return false; } // talk app found // check for talk update return PackageManager.PERMISSION_GRANTED == pm .checkPermission("android.permission.SEND_SMS", "com.google.android.talk"); } 

    No estoy seguro con la primera parte de comprobar el paquete com.google.android.apps.babel .
    El AndroidManifest.xml decodificado de la aplicación de hangouts de mi N4 muestra un packageName="com.google.android.apps.babel" . Pero el PackageManager lanza un NameNotFoundException .
    Tal vez usted puede dejar caer esa primera parte por completo.

    Usted debe usar la versión de la aplicación, Hangouts es 2.0 y gtalk en 2.1.33 parece ser el último.

    Echa un vistazo a: https://stackoverflow.com/a/6593822/955143

    Pero quieres usar algo como

     PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); version = pInfo.versionName; 

    Dado que Gtalk no se actualizará aún más, puede retransmitir en este método para identificarlo, otro enfoque podría ser siempre enviar a su usuario al mercado si su aplicación Hangouts no es la última (o algunas versiones).

    La desventaja es que usted tendrá que mantener un ojo en las actualizaciones de Hangout para adaptar su código para reaccionar en consecuencia.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.