2016-05-12 8 views
9

दो शर्तें हैं:केवल ईमेल ऐप्स का उपयोग करके अनुलग्नक के साथ ईमेल कैसे भेजें?

  • लगाव
  • Intent चयनकर्ता के साथ ईमेल, वहाँ केवल ईमेल क्षुधा होना चाहिए।

क्या मैं जानता हूं/किया:

  • Intent.ACTION_SENDTOintent.setData(Uri.parse("mailto:")) साथ यकीन है कि Intent चयनकर्ता में केवल ईमेल क्षुधा देखते हैं कि कर सकते हैं, लेकिन यह लगाव नहीं लाएगी (यह Gmail जैसे कुछ ऐप्स के लिए होगा, लेकिन ऐसे कई ऐप्स भी हैं जो अनुलग्नक को अनदेखा करेंगे)।

  • Intent.ACTION_SEND संलग्नक के साथ ईमेल भेज सकते हैं। हालांकि, Intent चयनकर्ता में, ऐसे ऐप्स होंगे जो वास्तव में ईमेल ऐप्स नहीं हैं लेकिन Intent.ACTION_SEND पर प्रतिक्रिया दे सकते हैं। intent.setType("message/rfc822") का उपयोग करके उन ऐप्स की संख्या कम हो सकती है लेकिन सभी नहीं।

  • इस उत्तर का संदर्भ: https://stackoverflow.com/a/8550043/3952691 और लगभग मेरे लक्ष्यों में सफल होते हैं। मेरे कोड के रूप में नीचे है:

    private static void sendFeedbackWithAttachment(Context context, String subject) { 
        Intent intent = new Intent(Intent.ACTION_SENDTO); 
        intent.setData(Uri.parse("mailto:")); 
    
        PackageManager packageManager = context.getPackageManager(); 
        List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, 0); 
        if (resolveInfos.isEmpty()) { 
         Toast.makeText(context, context.getString(R.string.error_activity_not_found), 
           Toast.LENGTH_SHORT).show(); 
        } else { 
         // ACTION_SEND may be replied by some apps that are not email apps. However, 
         // ACTION_SENDTO doesn't allow us to choose attachment. As a result, we use 
         // an ACTION_SENDTO intent with email data to filter email apps and then send 
         // email with attachment by ACTION_SEND. 
         List<LabeledIntent> intents = new ArrayList<>(); 
         Uri uri = getLatestLogUri(); 
         for (ResolveInfo info : resolveInfos) { 
          Intent i = new Intent(Intent.ACTION_SEND); 
          i.setPackage(info.activityInfo.packageName); 
          i.setClassName(info.activityInfo.packageName, info.activityInfo.name); 
          i.putExtra(Intent.EXTRA_EMAIL, new String[] { Def.Meta.FEEDBACK_EMAIL }); 
          i.putExtra(Intent.EXTRA_SUBJECT, subject); 
          i.putExtra(Intent.EXTRA_STREAM, uri); 
          intents.add(new LabeledIntent(i, info.activityInfo.packageName, 
            info.loadLabel(context.getPackageManager()), info.icon)); 
         } 
         Intent chooser = Intent.createChooser(intents.remove(0), 
           context.getString(R.string.send_feedback_to_developer)); 
         chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
           intents.toArray(new LabeledIntent[intents.size()])); 
         context.startActivity(chooser); 
        } 
    } 
    

    हालांकि, कुछ उपकरणों पर (उदाहरण के लिए, MIUI V5 के साथ Xiaomi 2S, मैं नहीं जानता कि यह एक तीसरे पक्ष रॉम से प्रभावित हो सकते हैं), परिणाम एक है खाली Intent चयनकर्ता। और ऐसा लगता है कि एंड्रॉइड 6.0 से ऊपर, Intent.EXTRA_INITIAL_INTENTS में कुछ कीड़े हैं (Custom intent-chooser - why on Android 6 does it show empty cells?, और दूसरा: https://code.google.com/p/android/issues/detail?id=202693)।

नतीजतन, मुझे नहीं पता कि मेरे लक्ष्यों को कैसे प्राप्त किया जाए। कृपया मेरी मदद करें, अग्रिम धन्यवाद।

+0

"(mailto:") यकीन है कि आशय चयनकर्ता में केवल ईमेल क्षुधा देखते हैं कि कर सकते हैं Intent.ACTION_SENDTO intent.setData Uri.parse() "के साथ" -- नहीं, यह नहीं है। यह चयनकर्ता को उस ऐप में डालता है जो उस 'इरादे' संरचना का समर्थन करने के लिए चुना जाता है। कोई भी ऐसा ऐप लिख सकता है, और यह "ईमेल ऐप" नहीं हो सकता है। "ईमेल ऐप्स" के बारे में कोई सार्वभौमिक घोषणा नहीं है। – CommonsWare

+0

@CommonsWare हाँ मुझे यह पता है। लेकिन मैं आम मामले के बारे में बात कर रहा हूं। हम कह सकते हैं, एक ऐप जिसमें 'Intent.ACTION_SEND' के लिए 'IntentFilter' है और" mailto "के रूप में डेटा स्कीम है, यदि यह औपचारिक ऐप है, तो इसमें ईमेल ईवेंट को संभालने की क्षमता होनी चाहिए, इस प्रकार हम इसे" ईमेल ऐप "। – ywwynm

+0

@ywwynm उपयोग करें .setType ("message/rfc822") या चयनकर्ता आपको सभी (कई) एप्लिकेशन दिखाएगा जो भेजने के इरादे का समर्थन करते हैं। – Stanojkovic

उत्तर

-1

इस और अधिक कुशल का प्रयास करें:

String[] TO = {"[email protected]"}; 
    Uri uri = Uri.parse("mailto:[email protected]") 
      .buildUpon() 
      .appendQueryParameter("subject", "subject") 
      .appendQueryParameter("body", "body") 
      .build(); 
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO, uri); 
    emailIntent.putExtra(Intent.EXTRA_EMAIL, TO); 
    startActivity(Intent.createChooser(emailIntent, "Send mail...")); 
+0

क्या आपने इसे स्वयं कोशिश की? चयनकर्ता में दिखाए गए ईमेल की तुलना में अधिक ऐप्स होंगे। और आपका इरादा प्रकार "सादा/पाठ" है? – ywwynm

+0

मैंने अपडेट किया है कोड आप कोशिश कर सकते हैं। \ n फ़ाइल भेजने के लिए उरी uri = Uri.fromFile (नई फ़ाइल (छविपाथ)); ईमेल INTent.putExtra (Intent.EXTRA_STREAM, uri); – Gmaster

+0

@ywwynm यह काम कर रहा है या नहीं? – Gmaster

-2

इस

विकल्प 1

Intent emailIntent = new Intent(
      android.content.Intent.ACTION_VIEW); 


    //Option 1 
    Uri data = Uri.parse("mailto:?subject=" + "blah blah subject" 
      + "&body=" + "blah blah body" + "&to=" + "[email protected]"); 
    emailIntent.setData(data); 

    startActivity(Intent.createChooser(emailIntent, "")); 

परिणाम क्या करने के दो तरीके हैं

enter image description here

विकल्प 2

यह सिवाय perfactly काम करता है अभ्यस्त एफ़टीपी को फ़िल्टर

//Option 2 
    emailIntent = new Intent(
      android.content.Intent.ACTION_SEND); 
    emailIntent.setType("message/rfc822"); 
    final String[] toRecipients = new String[] { "[email protected]", "", }; 
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, toRecipients); 
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "blah blah subject"); 
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
      Html.fromHtml("blah blah body")); 

    startActivity(Intent.createChooser(emailIntent, "")); 

परिणाम

enter image description here

दोनों तरीकों मामूली खामियां है मैं तुम दोनों तरीके दिखा यह अब एक चुनने के लिए आप तक।

+0

यीशु !!! क्या आप कृपया मेरा प्रश्न सावधानी से देख सकते हैं? धारा 1 में: "दो आवश्यकताएं हैं", मैंने पोस्ट किया है जो मुझे बहुत स्पष्ट रूप से चाहिए। तो आइए अपना उत्तर जांचें: विकल्प 1 के लिए, अटैचमेंट कहां है? और विकल्प 2, मैंने एडीएम ब्राउज़र और लैन की तरह कुछ देखा? क्या वे ऐप ईमेल करते हैं? हे भगवान!!! – ywwynm

0

एक मेल भेजने के लिए नीचे दिए गए कोड का प्रयास करें

String filename="filename.vcf"; 
File filelocation = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), filename); 
Uri path = Uri.fromFile(filelocation); 
Intent emailIntent = new Intent(Intent.ACTION_SEND); 
// set the type to 'email' 
emailIntent .setType("vnd.android.cursor.dir/email"); 
String to[] = {"[email protected]"}; 
emailIntent .putExtra(Intent.EXTRA_EMAIL, to); 
// the attachment 
emailIntent .putExtra(Intent.EXTRA_STREAM, path); 
// the mail subject 
emailIntent .putExtra(Intent.EXTRA_SUBJECT, "Subject"); 
startActivity(Intent.createChooser(emailIntent , "Send email...")); 
+0

** संदेश/आरएफसी 822 ** के बारे में क्या, क्या यह ईमेल प्रकार सेट करता है? –

संबंधित मुद्दे