¿Cómo forzar Share Intent para abrir una aplicación específica?

Me gusta la intención de compartir, es perfecto para abrir aplicaciones para compartir con parámetros de imagen y texto.

Pero ahora estoy investigando la forma de forzar la intención de compartir para abrir una aplicación específica de la lista, con los parámetros dados a la intención de compartir.

Este es mi código real, muestra la lista de aplicaciones para compartir instaladas en el teléfono. Por favor, ¿alguien me puede decir qué debo agregar al código para forzar, por ejemplo, la aplicación oficial de Twitter? y la aplicación faccebok oficial?

Intent sharingIntent = new Intent(Intent.ACTION_SEND); Uri screenshotUri = Uri.parse("file:///sdcard/test.jpg"); sharingIntent.setType("image/*"); sharingIntent.putExtra(Intent.EXTRA_TEXT, "body text"); sharingIntent.putExtra(Intent.EXTRA_STREAM, screenshotUri); startActivity(Intent.createChooser(sharingIntent, "Share image using")); 

Gracias

Para Facebook

 public void shareFacebook() { String fullUrl = "https://m.facebook.com/sharer.php?u=.."; try { Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.setClassName("com.facebook.katana", "com.facebook.katana.ShareLinkActivity"); sharingIntent.putExtra(Intent.EXTRA_TEXT, "your title text"); startActivity(sharingIntent); } catch (Exception e) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(fullUrl)); startActivity(i); } } 

Para Twitter.

 public void shareTwitter() { String message = "Your message to post"; try { Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.setClassName("com.twitter.android","com.twitter.android.PostActivity"); sharingIntent.putExtra(Intent.EXTRA_TEXT, message); startActivity(sharingIntent); } catch (Exception e) { Log.e("In Exception", "Comes here"); Intent i = new Intent(); i.putExtra(Intent.EXTRA_TEXT, message); i.setAction(Intent.ACTION_VIEW); i.setData(Uri.parse("https://mobile.twitter.com/compose/tweet")); startActivity(i); } } 

Hay una manera más genérica de hacerlo, y no es necesario conocer el nombre completo del paquete de la intención de la aplicación.

Ver esta publicación: ¿Cómo personalizar el bash de compartir en Android?

Solución de trabajo 100%

si quieres compartir algo en cualquier aplicación que desees o abrir una url en cada acción, simplemente utiliza este método:

 private void shareOrViewUrlViaThisApp(String appPackageName, String url) { boolean found = false; Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); List resInfo = getPackageManager().queryIntentActivities(intent, 0); if (!resInfo.isEmpty()){ for (ResolveInfo info : resInfo) { if (info.activityInfo.packageName.toLowerCase().contains(appPackageName) || info.activityInfo.name.toLowerCase().contains(appPackageName) ) { intent.setPackage(info.activityInfo.packageName); found = true; break; } } if (!found) return; startActivity(Intent.createChooser(intent, "Select")); } } 

y simplemente llame:

 shareOrViewUrlViaThisApp(,); 

Esta respuesta fue inspirada de esto .