190 votes

Android: Partager du texte brut en utilisant intent (à toutes les applications de messagerie)

Je suis en train d'essayer de partager du texte en utilisant un intent :

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

et en l'enveloppant avec le chooser :

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

ça marche ! mais uniquement pour l'application email.
ce dont j'ai besoin est un intent général pour toutes les applications de messagerie : emails, SMS, IM (Whatsapp, Viber, Gmail, SMS...) j'ai essayé en utilisant android.content.Intent.ACTION_VIEW et j'ai essayé en utilisant i.setType("vnd.android-dir/mms-sms"); rien n'a aidé...

("vnd.android-dir/mms-sms" partagé en utilisant les SMS uniquement !)

384voto

Arpit Garg Points 3111

Utiliser le code comme suit :

    /*Créer un Intent ACTION_SEND*/
    Intent intent = new Intent(android.content.Intent.ACTION_SEND);
    /*Ceci sera le contenu réel que vous souhaitez partager.*/
    String shareBody = "Voici le contenu à partager";
    /*Le type de contenu est du texte, évidemment.*/
    intent.setType("text/plain");
    /*Appliquer les informations de l'objet et du corps.*/
    intent.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(R.string.share_subject));
    intent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
    /*Go!*/
    startActivity(Intent.createChooser(intent, getString(R.string.share_using)));

8 votes

Mais je n'ai pas compris ce qui fait la différence ? Juste la String du corps extérieur ?

1 votes

Il n'y a pas de différence. Sur l'émulateur, j'ai réussi à ouvrir l'application de messagerie, mais sur mon téléphone et ma tablette, on m'a demandé de choisir parmi la liste des applications. Probablement qu'il s'agit d'installer ces applications supplémentaires sur l'émulateur.

0 votes

Super réponse! Est-ce que quelqu'un peut dire pourquoi cela ne fonctionne pas si vous omettez la partie sharingIntent.setType("text/plain"); ?

72voto

lustig Points 1570

La nouvelle façon de faire cela serait d'utiliser ShareCompat.IntentBuilder comme ceci :

// Créez et lancez notre intention en un seul coup
ShareCompat.IntentBuilder
        // getActivity() ou le champ d'activité si vous êtes dans un fragment
        .from(this) 
        // Le texte qui sera partagé
        .setText(textToShare)
        // type MIME le plus général pour le partage de texte
        .setType("text/plain") 
        .setStream(uriToContentThatMatchesTheArgumentOfSetType)
        /*
         * [OPTIONNEL] Désignez une URI à partager. Votre type
         * défini ci-dessus devra correspondre au type de données
         * que vous désignez avec cette URI. Pas sûr de ce qui se passe
         * si vous ne le faites pas, mais
         * ne prenons pas de risques.
         * 
         * Par exemple, pour partager une image, vous feriez ce qui suit :
         *     File imageFile = ...;
         *     Uri uriToImage = ...; // Convertissez le fichier en URI
         *     Intent shareImage = ShareCompat.IntentBuilder.from(activity)
         *       .setType("image/png")
         *       .setStream(uriToImage)
         *       .getIntent();
         */
        .setEmailTo(arrayOfStringEmailAddresses)
        .setEmailTo(singleStringEmailAddress)
        /*
         * [OPTIONNEL] Désignez les destinataires de l'e-mail sous forme d'un tableau
         * de chaînes de caractères ou d'une seule chaîne de caractères
         */ 
        .setEmailTo(arrayOfStringEmailAddresses)
        .setEmailTo(singleStringEmailAddress)
        /*
         * [OPTIONNEL] Désignez les adresses e-mail qui recevront 
         * une copie cachée sur un e-mail sous forme d'un tableau de chaînes
         * ou d'une seule chaîne de caractères
         */ 
        .addEmailBcc(arrayOfStringEmailAddresses)
        .addEmailBcc(singleStringEmailAddress)
        /* 
         * Le titre du sélecteur que le système affichera
         * pour permettre à l'utilisateur de sélectionner une application
         */
        .setChooserTitle(votreTitreDeChoix)
        .startChooser();

Si vous avez d'autres questions sur l'utilisation de ShareCompat, je vous recommande vivement cet excellent article de Ian Lake, un avocat développeur Android chez Google, pour une analyse plus complète de l'API. Comme vous le remarquerez, j'ai emprunté une partie de cet exemple à cet article.

Si cet article ne répond pas à toutes vos questions, il y a toujours le Javadoc de ShareCompat.IntentBuilder sur le site Web des développeurs Android. J'ai ajouté plus à cet exemple d'utilisation de l'API sur la base du commentaire de clemantiano.

38voto

yuchi_1k91 Points 84

Ceci est un excellent exemple de partage avec Intents dans Android :

* Partager avec Intents dans Android

//Partager du texte:

Intent intent2 = new Intent(); intent2.setAction(Intent.ACTION_SEND);
intent2.setType("text/plain");
intent2.putExtra(Intent.EXTRA_TEXT, "Votre texte ici" );  
startActivity(Intent.createChooser(intent2, "Partager 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, "Objet de l'email");
intent2.putExtra(Intent.EXTRA_TEXT, "Votre texte ici" );  
startActivity(intent2);

//Partager des fichiers:

//Image:

boolean isPNG = (path.toLowerCase().endsWith(".png")) ? true : false;

Intent i = new Intent(Intent.ACTION_SEND);
//Définir le type de fichier
if(isPNG)
{
    i.setType("image/png");//Avec un fichier d'image png ou définir le type "image/*"
}
else
{
    i.setType("image/jpeg");
}

Uri imgUri = Uri.fromFile(new File(path));//Chemin absolu de l'image
i.putExtra(Intent.EXTRA_STREAM, imgUri);//Uri de l'image
startActivity(Intent.createChooser(i, "Partager 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");//Type de fichier APK  
   intent2.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f) );  
   startActivity(Intent.createChooser(intent2, "Partager via"));
}
break;

14voto

Arunendra Points 1472

Utilisez la méthode ci-dessous, passez simplement le sujet et le corps en arguments de la méthode

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

4voto

Ravi Yadav Points 1189

Voici le code qui fonctionne avec l'e-mail ou l'application de messagerie. Si vous partagez par e-mail, le sujet et le corps sont tous deux ajoutés.

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
                sharingIntent.setType("text/plain");

                String shareString = Html.fromHtml("Nom du médicament:" + medicine_name +
                        "Nom du magasin:" + “store_name “+ "" +
                        "Adresse du magasin:" + “store_address” + "")  .toString();
                                      sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Demande de médicament");
                sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareString);

                if (sharingIntent.resolveActivity(context.getPackageManager()) != null)
                    context.startActivity(Intent.createChooser(sharingIntent, "Partager via"));
                else {
                    Toast.makeText(context, "Aucune application trouvée sur votre téléphone capable d'effectuer cette action", Toast.LENGTH_SHORT).show();
                }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X