2009-02-25 14 views
67

पर एक फ़ाइल संलग्न करने का प्रयास कर रहा हूं, मैं एक ईमेल भेजने के लिए एक इरादा लॉन्च करने की कोशिश कर रहा हूं। यह सब काम करता है, लेकिन जब मैं वास्तव में ईमेल भेजने की कोशिश करता हूं तो कुछ अजीब चीजें होती हैं।एसडी कार्ड से फ़ाइल को

यहाँ

कोड

Intent sendIntent = new Intent(Intent.ACTION_SEND); 
sendIntent.setType("image/jpeg"); 
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Photo"); 
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://sdcard/dcim/Camera/filename.jpg")); 
sendIntent.putExtra(Intent.EXTRA_TEXT, "Enjoy the photo"); 
startActivity(Intent.createChooser(sendIntent, "Email:")); 

तो अगर मैं Gmail मेनू संदर्भ यह लगाव को दर्शाता है का उपयोग कर लॉन्च करते हैं, की मदद से मुझे टाइप जो ईमेल करने के लिए है, और शरीर को संपादित & अधीन है। कोई बड़ी बात नहीं। मैंने भेज दिया, और यह भेजता है। एकमात्र चीज अटैचमेंट नहीं भेजा जाता है।

तो। मैंने सोचा, क्यों इसे ईमेल मेनू संदर्भ (मेरे फोन पर मेरे बैकअप ईमेल खाते के लिए) का प्रयास न करें। यह अनुलग्नक दिखाता है, लेकिन शरीर या विषय में बिल्कुल कोई पाठ नहीं है। जब मैं इसे भेजता हूं, तो लगाव सही ढंग से भेजता है। इससे मुझे विश्वास होगा कि कुछ गलत है। क्या मुझे मैनिफेस्ट लॉन्च में ईमेल डब्ल्यू/अटैचमेंट भेजने का इरादा रखने की नई अनुमति चाहिए? मैं क्या गलत कर रहा हूं?

+1

धन्यवाद Chrispix की एक ArrayList पारित करके एक से अधिक आइटम संलग्न कर सकते हैं !, इस कोड को मेरी मोटो Cliq में काम किया। – Jana

उत्तर

94

इसके अलावा एक ही समस्या

कोड हो रही:

Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
    emailIntent.setType("image/jpeg"); 
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[] 
    {"[email protected]"}); 
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, 
    "Test Subject"); 
    emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
    "go on read the emails"); 
    Log.v(getClass().getSimpleName(), "sPhotoUri=" + Uri.parse("file:/"+ sPhotoFileName)); 
    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:/"+ sPhotoFileName)); 
    startActivity(Intent.createChooser(emailIntent, "Send mail...")); 

से एडीबी लॉगकैट:

V/DumbDumpersMain(3972): sPhotoUri=file://sdcard/DumbDumpers/DumbDumper.jpg 
I/ActivityManager( 56): Starting activity: Intent { action=android.intent.action.CHOOSER comp={android/com.android.internal.app.ChooserActivity} (has extras) } 
I/ActivityManager( 56): Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x3000000 comp={com.google.android.gm/com.google.android.gm.ComposeActivityGmail} (has extras) } 
I/ActivityManager( 56): Starting activity: Intent { action=android.intent.action.SEND type=jpeg/image flags=0x2800000 comp={com.google.android.gm/com.google.android.gm.ComposeActivity} (has extras) } 
D/gmail-ls( 120):  MailProvider.query: content://gmail-ls/labels/[email protected](null, null) 
D/Gmail (2507):  URI FOUND:file://sdcard/DumbDumpers/DumbDumper.jpg 

ऐसा लगता है कि ईमेल प्रदाता संलग्न है एक 0 लंबाई फ़ाइल एनजी। जब मैं फाइल सिस्टम की जांच करता हूं तो फाइल वहां होती है और सही होती है। कोड जो छवि फ़ाइल बनाता है उसे ईमेल करने के प्रयास से पहले समाप्त हो गया है।

किसी जादू रिबूट (मैं पहले से ही की कोशिश की है कि) के बिना इस तय?

सादर,
फिन

अद्यतन

मेरे लिए पथ होना चाहिए

file:///sdcard/DumbDumpers/DumbDumper.jpg

आप अतिरिक्त / रूट निर्देशिका, यानी करने के लिए इस बिंदु के रूप में की जरूरत है:

file://+/sdcard/DumbDumpers/DumbDumper.jpg

संयुक्त रूप

file:///sdcard/DumbDumpers/DumbDumper.jpg

में ऊपर स्निपेट को जरूरत है:

emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ sPhotoFileName)); 

मुझे आशा है कि इस मदद करता है। मुझे डीबग करने में उम्र लग गई।

सादर,
फिनले

+6

मैंने ऊपर उठाया, लेकिन अगर आप इसे फिर से काम करते हैं तो यह बेहतर होगा ताकि अंतिम समाधान कोड में काम किया जा सके। यहां कहानी की तुलना में समाधान अधिक महत्वपूर्ण है। –

+3

मैंने इस तथ्य को प्रतिबिंबित करने के लिए उत्तर बदल दिया कि इसे 3 स्लेश की आवश्यकता है। मैंने इसे भी वोट दिया। – Chrispix

+0

अपवॉट, मैं इसे फिर से नहीं करूँगा क्योंकि लोगों को वास्तव में पता होना चाहिए कि त्रुटि कहां थी। समाधान के लिए धन्यवाद। – mad

4

ऐसा लगता है कि यह वास्तव में, सही यकीन है कि क्या हो रहा था नहीं है, लेकिन एक रिबूट के बाद यह काम करना शुरू किया:/

+0

ओपी के कोड में एक टाइपो है: पथ 'फ़ाइल होना चाहिए: /// sdcard' (तीन स्लेश नोट करें, दो का विरोध करें)। –

7

"Uri.parse" उपयोग "Uri.fromFile (नई फ़ाइल के बजाय (पर्यावरण।getExternalStorageDirectory(), "फ़ाइल नाम")) "

Environment.getExternalStorageDirectory() -। मेरी तरफ से एसडी कार्ड या किसी अन्य बाह्य भंडारण

21

बस एक छोटी सी टिप्पणी करने के लिए पथ मैं के साथ एक ही समस्याओं का सामना कर रहा है ।

Intent i = new Intent(Intent.ACTION_SEND); 
i.putExtra(Intent.EXTRA_SUBJECT, "Title"); 
i.putExtra(Intent.EXTRA_TEXT, "Content"); 
i.putExtra(Intent.EXTRA_STREAM, uri); 
i.setType("text/plain"); 
startActivity(Intent.createChooser(i, "Send mail")); 

और यहाँ,

: जीमेल, लेकिन किसी भी तरह यह काम करने के लिए जब मैं पहली बार एसडी कार्ड पर सवाल में फ़ाइल की दुकान और वहाँ से, बजाय संपत्ति से प्राप्त लगती है तो मेरी कोड पीछा कर रहा है
uri = Uri.fromFile(new File(context.getFilesDir(), FILENAME)); 
जबकि

uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), FILENAME)); 

करता

, नहीं काम करता है।

सादर, माइकल

+0

मुझे वही चीज़ मिली। मुझे आश्चर्य है कि क्या यह फ़ाइल पढ़ने के जीमेल (या अन्य मेल प्रोग्राम) के साथ अनुमति अनुमति है? एक चीज जिसने मेरी मदद की वह यह है कि जब मैंने अंतर्निहित "मेल" प्रोग्राम (जीमेल नहीं) का उपयोग किया, तो उसने दिखाया कि लगाव 0 बाइट था। यह जानना अच्छा था कि मेरी ईमेल भेजने और जांचने के बिना समस्या मौजूद थी। :-) –

+1

मैं 'startActivityForResult()' के साथ 'startActivity() 'को प्रतिस्थापित करने और 'AActivityResult()' में एसडी कार्ड की जड़ से फ़ाइल को हटाने का सुझाव दूंगा। –

+0

मुझे लगता है कि यह एक अनुमति मुद्दा नहीं है। यह एंड्रॉइड के साथ एक मुद्दा है, जिसे 2.3 और 4.2 के बीच कहीं भी ठीक किया गया है। 2.3 पर, अगर मैं आंतरिक स्टोरेज पठनीय पर एक फ़ाइल बना देता हूं तो अन्य ऐप्स इसे खोल सकते हैं, लेकिन जीमेल अभी भी इसे संलग्न नहीं कर सकता है। बाहरी भंडारण पर होना चाहिए। 4.2 पर मुझे यह समस्या नहीं है। – Tom

3

मैं एक ही समस्या है और समाधान के लिए हर जगह देखा। अंततः मैंने इसे एक ओपन सोर्स ऐप ढूंढकर हल किया जो बॉक्स से बाहर काम करता था और देखा कि उन्होंने यह कैसे किया। कोड इतना लंबा है इसलिए मैं इसे यहां उद्धृत नहीं करूंगा लेकिन एक लिंक पोस्ट करूंगा। लाइन 449

http://rehearsalassist.svn.sourceforge.net/viewvc/rehearsalassist/android/trunk/src/urbanstew/RehearsalAssistant/SessionPlayback.java?revision=94&view=markup

मैं समान होने के लिए मेरी कोड पुनर्संशोधित में sendEmail समारोह को देखो, और अब यह काम करता है। मुझे आशा है कि यह दूसरों को एक ही स्थिति में मदद करेगा।

3

से RFC 1738 अनुभाग 3.10:

एक फ़ाइल यूआरएल रूप ले लेता है:

file://<host>/<path> 

जहां मेजबान पर प्रणाली के पूर्ण योग्य डोमेन नाम जो रास्ता पहुँचा जा सकता है है, और पथ एक पदानुक्रमित प्रपत्र निर्देशिका/निर्देशिका /.../ नाम का निर्देशिका पथ है।

तो यह फ़ाइल है: /// पथ/से/रूट जैसे http://host/path/from/root क्योंकि दूसरे और तीसरे स्लैश के बीच एक अंतर्निहित 'लोकलहोस्ट' है। लेकिन जैसा ऊपर बताया गया है, इसे बनाने के लिए Uri.FromFile() का उपयोग करें।

+0

लगभग 3 स्लैश का हिस्सा मैं चाहता हूं। धन्यवाद। –

0

मुझे वही लक्षण थे। मेरे मामले में ऐसा इसलिए था क्योंकि मैं शुरुआत में MODE_PRIVATE अनुमतियों के साथ अनुलग्नक को सहेज रहा था। जैसे ही मैंने इसे MODE_WORLD_READABLE में बदल दिया, ऐसा लगता है कि जीमेल तब फ़ाइल तक पहुंचने और अनुलग्नक को सही तरीके से भेजने में सक्षम था।

See more

0

यह मेरे लिए पूरी तरह से काम है: इस समाधान पर निकोलस कैश फ़ोल्डर के अंदर एक प्रतिलिपि बना सकते हैं और यहां जीमेल आशय का उपयोग कर सकते है! http://stephendnicholas.com/archives/974

4
Intent i = new Intent(Intent.ACTION_SEND); 
    i.setType("message/rfc822"); 
    i.putExtra(Intent.EXTRA_EMAIL , new String[]{"[email protected]"}); 
    i.putExtra(Intent.EXTRA_SUBJECT, "Data from app"); 
    i.putExtra(Intent.EXTRA_TEXT , "experience number x"); 
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "filename.txt")); 
    i.putExtra(Intent.EXTRA_STREAM, uri); 
    startActivity(Intent.createChooser(i, "Send email...")); 
0
public void sendMail(String path) { 
     Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND); 
     emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, 
     new String[] {AppConstant.server_mail}); 
     emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, 
     "IBPS ERROR Mail"); 
     emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, 
     "This is an autogenerated mail from IBPS app"); 
     emailIntent.setType("image/png"); 
     Uri myUri = Uri.parse("file://" + path); 
     emailIntent.putExtra(Intent.EXTRA_STREAM, myUri); 
     startActivity(Intent.createChooser(emailIntent, "Send mail...")); 
     } 
0

इसके अलावा (Intent.FLAG_GRANT_READ_URI_PERMISSION) Intent.addFlags जोड़ने का प्रयास करें; इससे मेरी समस्या में मदद मिली।

0

मैं 4 दिनों के बाद इस पर समाधान मिल गया है, कृपया का अनुसरण करते हुए पथ देने एंड्रॉयड (जावा) में कक्षा फ़ाइल बिंदुओं को नोट:

1) आंतरिक भंडारण स्ट्रिंग पथ के लिए पथ का उपयोग करें = "/ भंडारण/sdcard0/myfile.txt ";

2) पथ = "/ भंडारण/sdcard1/myfile.txt";

3) मैनिफेस्ट फ़ाइल में अनुमतियों का उल्लेख करें।

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

4) पुष्टि करने के लिए पहले जांच कर लें फ़ाइल लंबाई।

5) & sdcard1 इसी वरना है sdcard0 के बारे में ES फ़ाइल एक्सप्लोरर में रास्तों की जाँच करें ......

उदा

File file=new File(path); 
long=file.length();//in Bytes 
0

एक अनुलग्नक के साथ एक ईमेल भेजें: (तक डॉक्स)

आशय emailIntent = नए आशय (Intent.ACTION_SEND); ईमेलइन्टेंट.सेट टाइप (HTTP.PLAIN_TEXT_TYPE);

ईमेलइन्टेंट.पुट एक्स्ट्रा (Intent.EXTRA_EMAIL, नया स्ट्रिंग [] {"[email protected]"});

ईमेलइन्टेंट.पुट एक्स्ट्रा (Intent.EXTRA_SUBJECT, "ईमेल विषय"); ईमेलइन्टेंट.पुट एक्स्ट्रा (Intent.EXTRA_TEXT, "ईमेल संदेश टेक्स्ट"); ईमेलइन्टेंट.पुट एक्स्ट्रा (Intent.EXTRA_STREAM, Uri.parse ("सामग्री: // पथ/से/ईमेल/अनुलग्नक"));

// तुम भी Uris

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