दो शर्तें हैं:केवल ईमेल ऐप्स का उपयोग करके अनुलग्नक के साथ ईमेल कैसे भेजें?
- लगाव
Intent
चयनकर्ता के साथ ईमेल, वहाँ केवल ईमेल क्षुधा होना चाहिए।
क्या मैं जानता हूं/किया:
Intent.ACTION_SENDTO
intent.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)।
नतीजतन, मुझे नहीं पता कि मेरे लक्ष्यों को कैसे प्राप्त किया जाए। कृपया मेरी मदद करें, अग्रिम धन्यवाद।
"(mailto:") यकीन है कि आशय चयनकर्ता में केवल ईमेल क्षुधा देखते हैं कि कर सकते हैं Intent.ACTION_SENDTO intent.setData Uri.parse() "के साथ" -- नहीं, यह नहीं है। यह चयनकर्ता को उस ऐप में डालता है जो उस 'इरादे' संरचना का समर्थन करने के लिए चुना जाता है। कोई भी ऐसा ऐप लिख सकता है, और यह "ईमेल ऐप" नहीं हो सकता है। "ईमेल ऐप्स" के बारे में कोई सार्वभौमिक घोषणा नहीं है। – CommonsWare
@CommonsWare हाँ मुझे यह पता है। लेकिन मैं आम मामले के बारे में बात कर रहा हूं। हम कह सकते हैं, एक ऐप जिसमें 'Intent.ACTION_SEND' के लिए 'IntentFilter' है और" mailto "के रूप में डेटा स्कीम है, यदि यह औपचारिक ऐप है, तो इसमें ईमेल ईवेंट को संभालने की क्षमता होनी चाहिए, इस प्रकार हम इसे" ईमेल ऐप "। – ywwynm
@ywwynm उपयोग करें .setType ("message/rfc822") या चयनकर्ता आपको सभी (कई) एप्लिकेशन दिखाएगा जो भेजने के इरादे का समर्थन करते हैं। – Stanojkovic