Android: इरादे का उपयोग करके सादा पाठ साझा करें (सभी मैसेजिंग ऐप के लिए)


146

मैं एक आशय का उपयोग करके कुछ पाठ साझा करने का प्रयास कर रहा हूं:

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

और चयनकर्ता के साथ युद्ध करना:

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

यह काम करता हैं! लेकिन केवल ईमेल ऐप के लिए।
मुझे सभी मैसेजिंग ऐप के लिए एक सामान्य इरादे की आवश्यकता है: ईमेल, एसएमएस, आईएम (व्हाट्सएप, वाइबर, जीमेल, एसएमएस ...) का उपयोग android.content.Intent.ACTION_VIEW करने की कोशिश की और i.setType("vnd.android-dir/mms-sms");कुछ भी नहीं की मदद से उपयोग करने की कोशिश की ...

( "vnd.android-dir/mms-sms"केवल एसएमएस का उपयोग करके साझा किया गया!)

जवाबों:


313

कोड का उपयोग करें:

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

6
लेकिन मुझे समझ नहीं आया कि क्या फर्क पड़ता है ?? बस बाहरी शरीर स्ट्रिंग ??
skgskg

1
इसमें कोई फर्क नही है। एमुलेटर पर मुझे मैसेजिंग ऐप खोलने के लिए मिला लेकिन मेरे फोन और टैबलेट पर, मुझे ऐप्स की सूची में से चुनने के लिए कहा गया। संभवतः इसके बारे में एमुलेटर पर उन अतिरिक्त ऐप को स्थापित करना है।
पीयूष-किसी भी अंतर से पूछें

बहुत बढ़िया जवाब! क्या कोई बता सकता है कि अगर आप sharingIntent.setType("text/plain");हिस्सा छोड़ते हैं तो यह काम क्यों नहीं करता है ?
नेक्लिपएलेफ़

केवल व्हाट्सअप के लिए एक अलग टेक्स्ट कैसे सेट करें
salih kallai

1
इरादे के बंटवारे में स्निपेट के बाद जोड़ें ।ntent.setPackage ("com.whatsapp");
अर्पित गर्ग

62

ऐसा करने का नया तरीका ShareCompat.IntentBuilder का उपयोग करना होगा:

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

यदि आपके पास ShareCompat का उपयोग करने के बारे में कोई और प्रश्न हैं, तो मैं Google पर Android डेवलपर, अधिवक्ता की इस शानदार लेख की अत्यधिक अनुशंसा करता हूं, एपीआई के अधिक पूर्ण विराम के लिए। जैसा कि आप देखेंगे, मैंने इस लेख में से कुछ उदाहरण उधार लिए हैं।

यदि वह लेख आपके सभी प्रश्नों का उत्तर नहीं देता है, तो हमेशा Android डेवलपर्स वेबसाइट पर ShareCompat.IntentBuilder के लिए स्वयं Javadoc है । मैंने क्लेमेंटियानो की टिप्पणी के आधार पर एपीआई के उपयोग के इस उदाहरण में और अधिक जोड़ा


1
इस उत्तर के अलावा, ईमेल एड्रेस प्राप्तकर्ताओं को सेट करने के लिए भी तरीके हैं, जैसे setEmailBcc () , setEmailCc () और setEmailTo ()
क्लेमेंटियानो

साझा करने के लिए धन्यवाद, लेकिन यह मेरे लिए पूरी तरह से काम नहीं कर रहा है, कभी-कभी मुझे यह अपवाद मिलता है। java.lang.IllegalArgumentException: सेवा पंजीकृत नहीं: ActivityInfo {67f62c5 com.google.android.apps.hangouts.phone.hareIntentActivity}
berrytchaks

32

Android में Intents के साथ साझा करने के बारे में यह एक महान उदाहरण है:

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

9

नीचे विधि का उपयोग करें, बस विषय और शरीर को विधि के तर्क के रूप में पास करें

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

4

नीचे वह कोड है जो ईमेल या मैसेजिंग ऐप दोनों के साथ काम करता है। यदि आप ईमेल के माध्यम से साझा करते हैं तो विषय और शरीर दोनों को जोड़ा जाता है।

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

1

छवियाँ या बाइनरी डेटा:

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

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

0

यह कोड 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);

0

जीमेल शेयर के लिए 100% वर्किंग कोड

    Intent intent = new Intent (Intent.ACTION_SEND);
    intent.setType("message/rfc822");
    intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"anyMail@gmail.com"});
    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();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.