2011-05-02 14 views
6

मेरा एप्लिकेशन उपयोगकर्ताओं को फ़ाइलों को बनाने और संशोधित करने की अनुमति देता है। मैं उन्हें एक ईमेल संलग्नक के रूप में एक फाइल भेजने में सक्षम होना चाहता हूँ। इसलिए, मुझे पहले एक अस्थायी फ़ाइल बनाने और लिखने की आवश्यकता है, जिसे मैं ईमेल से जोड़ता हूं। और फिर जब मैं ईमेल प्रोग्राम समाप्त करता हूं तो मैं अस्थायी फ़ाइल को हटाना चाहता हूं। दुर्भाग्यवश, जैसे ही उपयोगकर्ता "भेज" पर क्लिक करता है, जीमेल ऐप परिणाम कोड के साथ प्रतिक्रिया देता है; और यदि परिणाम कोड प्राप्त होने पर मैं फ़ाइल को हटा देता हूं, तो कोई अनुलग्नक नहीं भेजा जाता है।एंड्रॉइड: मेरे आवेदन से अनुलग्नक के साथ ईमेल भेजने में समस्या

यह संभव है कि कुछ और गलत हो रहा है और अनुलग्नक किसी अन्य कारण से नहीं भेजा गया है, लेकिन मुझे पूरा यकीन है कि मेरा मूल्यांकन सही है क्योंकि अगर मैं mEmailTmpFile.delete() कॉल पर टिप्पणी करता हूं तो नीचे कोड ठीक से काम करता है। अगर मैं mEmailTmpFile.delete() से पहले Thread.sleep(4000) की तरह कुछ अवांछनीय कुछ करता हूं तो यह ठीक काम करता है।

क्या ईमेल भेजते समय अधिसूचित होने के लिए वैसे भी है? या किसी अन्य सुझाव के लिए कि मुझे इसके आसपास कैसे काम करना चाहिए?

//send an email... 

File externalStorage = Environment.getExternalStorageDirectory(); 
String sdcardPath = externalStorage.getAbsolutePath(); 
mEmailTmpFile = new File(sdcardPath + "/" + name); 

//do some other to ensure unqiueness and then write to the file... 

//all done writing, send email 

Intent sendIntent = new Intent(Intent.ACTION_SEND); 
sendIntent.setType("application/zip"); 
sendIntent.putExtra(Intent.EXTRA_SUBJECT, name); 
sendIntent.putExtra(Intent.EXTRA_TEXT, "File attached."); 
sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://"+ mEmailTmpFile.getPath())); 
startActivityForResult(Intent.createChooser(sendIntent, "Email"), REQUESTCODE_EMAIL); 

public synchronized void onActivityResult(int reqCode, int resultCode, Intent data) 
{ 
    if (reqCode == REQUESTCODE_EMAIL) 
    { 
    mEmailTmpFile.delete(); 
    } 
} 
+0

[इस उत्तर] के अनुसार नहीं (http://stackoverflow.com/questions/5471217/trivial-get-confirmation-of-email-sent-in-android/5471463#5471463)। – bzlm

उत्तर

0

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

+4

एंड्रॉइड फ़ाइल को तब तक नहीं हटाएगा जब तक आप File.deleteOnExit() सेट नहीं करते हैं, हालांकि मुझे यह अविश्वसनीय लगता है। इसके अलावा आप कैश निर्देशिका में बनाई गई फ़ाइलों का जिक्र कर रहे हैं, हालांकि, उन फ़ाइलों को जीमेल द्वारा एक्सेस नहीं किया जाएगा और इस प्रकार इसका उपयोग यहां नहीं किया जा सकता है। –

+0

@grennis कैश निर्देशिका में ऐप्स एक्सेस फ़ाइलों को ईमेल क्यों नहीं कर सकता? क्या आपने विश्व पठनीय मोड की कोशिश की? –

+0

हां यह एंड्रॉइड जिंजरब्रेड के रूप में काम नहीं करेगा, आखिरी बार मैंने कोशिश की थी –

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