Android: comparte texto sin formato con intención (para todas las aplicaciones de mensajería)

Intento compartir un texto con un bash:

Intent i = new Intent(android.content.Intent.ACTION_SEND); i.setType("text/plain"); i.putExtra(android.content.Intent.EXTRA_TEXT, "TEXT"); 

y warping con el selector:

 startActivity(Intent.createChooser(sms, getResources().getString(R.string.share_using))); 

¡funciona! pero solo para la aplicación de correo electrónico.
lo que necesito es una intención general para todas las aplicaciones de mensajería: correos electrónicos, sms, mensajería instantánea (Whatsapp, Viber, Gmail, SMS …) intenté usar android.content.Intent.ACTION_VIEW y traté de usar i.setType("vnd.android-dir/mms-sms"); nada ayudó …

( "vnd.android-dir/mms-sms" compartido usando solo sms!)

Usa el código como:

 String shareBody = "Here is the share content body"; Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); sharingIntent.setType("text/plain"); sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject Here"); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody); startActivity(Intent.createChooser(sharingIntent, getResources().getString(R.string.share_using))); 

Una nueva forma de hacerlo sería usar ShareCompat.IntentBuilder como esta:

 // Create and fire off our Intent in one fell swoop ShareCompat.IntentBuilder // getActivity() or activity field if within Fragment .from(this) // The text that will be shared .setText(textToShare) // most general text sharing MIME type .setType("text/plain") .setStream(uriToContentThatMatchesTheArgumentOfSetType) /* * [OPTIONAL] Designate a URI to share. Your type that * is set above will have to match the type of data * that your designating with this URI. Not sure * exactly what happens if you don't do that, but * let's not find out. * * For example, to share an image, you'd do the following: * File imageFile = ...; * Uri uriToImage = ...; // Convert the File to URI * Intent shareImage = ShareCompat.IntentBuilder.from(activity) * .setType("image/png") * .setStream(uriToImage) * .getIntent(); */ .setEmailTo(arrayOfStringEmailAddresses) .setEmailTo(singleStringEmailAddress) /* * [OPTIONAL] Designate the email recipients as an array * of Strings or a single String */ .setEmailTo(arrayOfStringEmailAddresses) .setEmailTo(singleStringEmailAddress) /* * [OPTIONAL] Designate the email addresses that will be * BCC'd on an email as an array of Strings or a single String */ .addEmailBcc(arrayOfStringEmailAddresses) .addEmailBcc(singleStringEmailAddress) /* * The title of the chooser that the system will show * to allow the user to select an app */ .setChooserTitle(yourChooserTitle) .startChooser(); 

Si tiene más preguntas sobre el uso de ShareCompat, le recomiendo este excelente artículo de Ian Lake , un Defensor de Desarrolladores de Android en Google, para obtener un desglose más completo de la API. Como notará, tomé prestado parte de este ejemplo de ese artículo.

Si ese artículo no responde todas sus preguntas, siempre existe el Javadoc en sí mismo para ShareCompat.IntentBuilder en el sitio web de Desarrolladores de Android. Agregué más a este ejemplo del uso de API sobre la base del comentario de Clemantiano.

Este es un gran ejemplo sobre compartir con Intents en Android:

* Compartir con Intents en Android

 //Share text: Intent intent2 = new Intent(); intent2.setAction(Intent.ACTION_SEND); intent2.setType("text/plain"); intent2.putExtra(Intent.EXTRA_TEXT, "Your text here" ); startActivity(Intent.createChooser(intent2, "Share via")); //via Email: Intent intent2 = new Intent(); intent2.setAction(Intent.ACTION_SEND); intent2.setType("message/rfc822"); intent2.putExtra(Intent.EXTRA_EMAIL, new String[]{EMAIL1, EMAIL2}); intent2.putExtra(Intent.EXTRA_SUBJECT, "Email Subject"); intent2.putExtra(Intent.EXTRA_TEXT, "Your text here" ); startActivity(intent2); //Share Files: //Image: boolean isPNG = (path.toLowerCase().endsWith(".png")) ? true : false; Intent i = new Intent(Intent.ACTION_SEND); //Set type of file if(isPNG) { i.setType("image/png");//With png image file or set "image/*" type } else { i.setType("image/jpeg"); } Uri imgUri = Uri.fromFile(new File(path));//Absolute Path of image i.putExtra(Intent.EXTRA_STREAM, imgUri);//Uri of image startActivity(Intent.createChooser(i, "Share via")); break; //APK: File f = new File(path1); if(f.exists()) { Intent intent2 = new Intent(); intent2.setAction(Intent.ACTION_SEND); intent2.setType("application/vnd.android.package-archive");//APk file type intent2.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f) ); startActivity(Intent.createChooser(intent2, "Share via")); } break; 

Use el método a continuación, simplemente pase el tema y el cuerpo como argumentos del método

 public static void shareText(String subject,String body) { Intent txtIntent = new Intent(android.content.Intent.ACTION_SEND); txtIntent .setType("text/plain"); txtIntent .putExtra(android.content.Intent.EXTRA_SUBJECT, subject); txtIntent .putExtra(android.content.Intent.EXTRA_TEXT, body); startActivity(Intent.createChooser(txtIntent ,"Share")); } 

A continuación se muestra el código que funciona tanto con la aplicación de correo electrónico o de mensajería. Si comparte por correo electrónico, se agregarán el asunto y el cuerpo.

 Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.setType("text/plain"); String shareString = Html.fromHtml("Medicine Name:" + medicine_name + "

Store Name:" + “store_name “+ "

" + "

Store Address:" + “store_address” + "

") .toString(); sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Medicine Enquiry"); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareString); if (sharingIntent.resolveActivity(context.getPackageManager()) != null) context.startActivity(Intent.createChooser(sharingIntent, "Share using")); else { Toast.makeText(context, "No app found on your phone which can perform this action", Toast.LENGTH_SHORT).show(); }

Imágenes o datos binarios:

 Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.setType("image/jpg"); Uri uri = Uri.fromFile(new File(getFilesDir(), "foo.jpg")); sharingIntent.putExtra(Intent.EXTRA_STREAM, uri.toString()); startActivity(Intent.createChooser(sharingIntent, "Share image using")); 

o HTML:

 Intent sharingIntent = new Intent(Intent.ACTION_SEND); sharingIntent.setType("text/html"); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml("

This is the text shared.

")); startActivity(Intent.createChooser(sharingIntent,"Share using"));

Este código es para compartir a través de sms

  String smsBody="Sms Body"; Intent sendIntent = new Intent(Intent.ACTION_VIEW); sendIntent.putExtra("sms_body", smsBody); sendIntent.setType("vnd.android-dir/mms-sms"); startActivity(sendIntent);