Android: condividi il testo in chiaro usando l’intento (per tutte le app di messaggistica)

Sto provando a condividere del testo usando un intento:

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

e deformando con il selettore:

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

Funziona! ma solo per l’app di posta elettronica.
quello di cui ho bisogno è un intento generale per tutte le app di messaggistica: email, sms, IM (Whatsapp, Viber, Gmail, SMS …) provato usando android.content.Intent.ACTION_VIEW e provato a usare i.setType("vnd.android-dir/mms-sms"); niente ha aiutato …

( "vnd.android-dir/mms-sms" condiviso solo con sms!)

Usa il codice come:

 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))); 

Un nuovo modo per farlo sarebbe utilizzare ShareCompat.IntentBuilder in questo modo:

 // 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(); 

Se hai altre domande sull’utilizzo di ShareCompat, ti consiglio vivamente questo fantastico articolo di Ian Lake , un avvocato degli sviluppatori Android presso Google, per una ripartizione più completa dell’API. Come noterai, ho preso in prestito alcuni di questo esempio da quell’articolo.

Se l’articolo non risponde a tutte le tue domande, c’è sempre lo stesso Javadoc per ShareCompat.IntentBuilder sul sito web degli sviluppatori Android. Ho aggiunto altro a questo esempio dell’uso dell’API sulla base del commento di clemantiano.

Questo è un ottimo esempio di condivisione con Intents in Android:

* Condividi con Intents in 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; 

Usa il metodo seguente, passa il sobject e il corpo come argomenti del metodo

 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")); } 

Di seguito è riportato il codice che funziona sia con l’app di posta elettronica o di messaggistica. Se condividi tramite e-mail, vengono aggiunti l’object e il corpo.

 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(); }

Questo codice è per la condivisione tramite 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); 

Immagini o dati binari:

 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"));