Android: Teilen Sie einfachen Text mit Absicht (für alle Messaging-Apps)

145

Ich versuche, Text mit einer Absicht zu teilen:

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

und Verzerrung mit Auswahl:

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

Es klappt! aber nur für E-Mail-App.
Was ich brauche, ist eine allgemeine Absicht für alle Messaging-Apps: E-Mails, SMS, Sofortnachrichten (WhatsApp, Viber, Gmail, SMS ...), die versucht haben, zu verwenden, android.content.Intent.ACTION_VIEW und versucht haben, i.setType("vnd.android-dir/mms-sms");nichts zu verwenden, was geholfen hat ...

( "vnd.android-dir/mms-sms"nur mit SMS geteilt!)

skgskg
quelle

Antworten:

312

Verwenden Sie den Code als:

    /*Create an ACTION_SEND Intent*/
    Intent intent = new Intent(android.content.Intent.ACTION_SEND);
    /*This will be the actual content you wish you share.*/
    String shareBody = "Here is the share content body";
    /*The type of the content is text, obviously.*/
    intent.setType("text/plain");
    /*Applying information Subject and Body.*/
    intent.putExtra(android.content.Intent.EXTRA_SUBJECT, getString(R.string.share_subject));
    intent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
    /*Fire!*/
    startActivity(Intent.createChooser(intent, getString(R.string.share_using)));
Arpit Garg
quelle
6
Aber ich habe nicht verstanden, was den Unterschied macht? Nur der äußere Körper String?
Skgskg
1
es gibt keinen Unterschied. Auf dem Emulator wurde die Messaging-App geöffnet, aber auf meinem Telefon und Tablet wurde ich gebeten, aus der Liste der Apps auszuwählen. Wahrscheinlich geht es darum, diese zusätzlichen Apps auf dem Emulator zu installieren.
Piyush-Ask Any Difference
Gute Antwort! Kann jemand sagen, warum dies nicht funktioniert, wenn Sie einen sharingIntent.setType("text/plain");Teil weglassen ?
NecipAllef
Wie man einen separaten Text nur für Whatsup einstellt
Salih Kallai
1
Fügen Sie dem Intent SharingIntent.setPackage ("com.whatsapp") das folgende Snippet hinzu.
Arpit Garg
62

Ein neuer Weg, dies zu tun, wäre die Verwendung von ShareCompat.IntentBuilder wie folgt:

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

Wenn Sie weitere Fragen zur Verwendung von ShareCompat haben, empfehle ich diesen großartigen Artikel von Ian Lake , einem Anwalt für Android-Entwickler bei Google, für eine umfassendere Aufschlüsselung der API. Wie Sie feststellen werden, habe ich einige dieser Beispiele aus diesem Artikel ausgeliehen.

Wenn dieser Artikel nicht alle Ihre Fragen beantwortet, finden Sie auf der Android Developers-Website immer den Javadoc selbst für ShareCompat.IntentBuilder . Ich habe diesem Beispiel der Verwendung der API auf der Grundlage von Clemantianos Kommentar mehr hinzugefügt .

lustig
quelle
1
Zusätzlich zu dieser Antwort gibt es auch Methoden zum Festlegen von E-Mail- Adressempfängern wie setEmailBcc () , setEmailCc () und setEmailTo () .
Clementiano
Vielen Dank für das Teilen, aber es funktioniert nicht perfekt für mich. Manchmal erhalte ich die Ausnahme java.lang.IllegalArgumentException: Dienst nicht registriert: ActivityInfo {67f62c5 com.google.android.apps.hangouts.phone.ShareIntentActivity}
berrytchaks
32

Dies ist ein großartiges Beispiel für das Teilen mit Absichten in Android:

* Mit Absichten in Android teilen

//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;
hungtdo
quelle
9

Verwenden Sie die folgende Methode, übergeben Sie einfach den Betreff und den Textkörper als Argumente der Methode

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

Unten finden Sie den Code, der sowohl mit der E-Mail- als auch mit der Messaging-App funktioniert. Wenn Sie per E-Mail teilen, werden Betreff und Text hinzugefügt.

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

                String shareString = Html.fromHtml("Medicine Name:" + medicine_name +
                        "<p>Store Name:" + store_name “+ "</p>" +
                        "<p>Store Address:" + store_address + "</p>")  .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();
                }
Ravi Yadav
quelle
1

Bilder oder Binärdaten:

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

oder HTML:

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/html");
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, Html.fromHtml("<p>This is the text shared.</p>"));
startActivity(Intent.createChooser(sharingIntent,"Share using"));

quelle
0

Dieser Code dient zum Teilen per 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);
Milon
quelle
0

100% Arbeitscode für Google Mail Share

    Intent intent = new Intent (Intent.ACTION_SEND);
    intent.setType("message/rfc822");
    intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"[email protected]"});
    intent.putExtra(Intent.EXTRA_SUBJECT, "Any subject if you want");
    intent.setPackage("com.google.android.gm");
    if (intent.resolveActivity(getPackageManager())!=null)
        startActivity(intent);
    else
        Toast.makeText(this,"Gmail App is not installed",Toast.LENGTH_SHORT).show();
Jar Droid
quelle