2009-12-02 4 views
10

मेरा एप्लिकेशन देशी SQLite डीबी में स्थानीय रूप से डेटा संग्रहीत करता है, और मैं उपयोगकर्ताओं को एक .csv फ़ाइल को ईमेल करके इस डेटा को निर्यात करने की अनुमति देना चाहता हूं। ऐसा करने के लिए मैं डेटाबेस से .csv पैदा कर रहा हूँ और एसडी कार्ड के लिए इसे लिखने, तो एक ई-मेल के साथ जोड़ते:एंड्रॉइड: एसडी को लिखने के बिना ईमेल को फ़ाइल संलग्न करना संभव है?

StringBuilder csv = generateFile(); 
writeFile(csv.toString(),"file.csv"); 
Intent email = new Intent(android.content.Intent.ACTION_SEND); 
email.setType("application/octet-stream"); 
email.putExtra(android.content.Intent.EXTRA_STREAM, Uri.parse("file://sdcard/file.csv")); 

कौन सा सभी महान काम करता है। मैं क्या सोच रहा हूं, हालांकि, अगर एसडी को पहले लिखने के चरण को छोड़ना संभव है, और सीधे डेटा संलग्न करें।

+1

मैं इसे एक उत्तर के रूप में पोस्ट करने वाला नहीं हूं, लेकिन क्या आप सिर्फ सीएसवी फ़ाइल को स्मृति में स्ट्रीम में नहीं लिख सकते हैं और फिर उस धारा को ईमेल के इरादे में पास कर सकते हैं? – MattC

+2

@MattC: नहीं, क्योंकि कोई "अतिरिक्त" प्रकार नहीं है जो एक धारा है। – CommonsWare

+1

+1 अच्छा सवाल .. – SRam

उत्तर

3

भले ही यह संभव हो, मैं इसके खिलाफ अनुशंसा करता हूं।

Intents गतिविधियों को लॉन्च करने के लिए उपयोग किया जाता है (संभावित रूप से) काफी लंबे समय तक (जब तक सवाल में गतिविधि "जीवित" होती है और कल्पना की जा सकती है (उदाहरण के लिए, ढेर पर वापस, क्योंकि ईमेल लिखते समय उपयोगकर्ता ने फोन किया, फिर आधे घंटे तक एसएमएस के माध्यम से चैट किया)।

इसके अलावा, Intents प्रक्रियाओं के बीच इस के हिस्से के रूप में उचित रूप से प्रतिलिपि प्राप्त करें। उदाहरण के लिए, ईमेल क्लाइंट आपके ऐप की तुलना में एक अलग प्रक्रिया में होगा।

इन दोनों कारणों से, आपको अपना Intents छोटा रखना होगा। सामग्री के लिए Uri का एकमात्र विकल्प सामग्री को सीधे अतिरिक्त में रखना होगा ... और सीएसवी फ़ाइल संभवतः थोड़ी बड़ी हो सकती है।

+0

मैं इसे पूरा करना चाहता था क्योंकि ऐसा लगता था कि यह वास्तव में निराशाजनक होगा और उपयोगकर्ता के पीओवी से असंबद्ध लगने के मामले में असफल होने के मामले में कोई एसडी घुड़सवार नहीं था। लेकिन यह अच्छी सलाह है, और मैं इसके साथ काम कर सकता हूं। – Bee

+3

आप इसे अपने ऐप-स्थानीय फ़ाइल स्टोरेज एरिया (getFilesDir()) में डालने और इसे विश्व-पठनीय बनाने की कोशिश कर सकते हैं। मैं आमतौर पर एक्सेस कंट्रोल झंडे से गड़बड़ नहीं करता हूं, लेकिन आपको फ़ाइल को पढ़ने में सक्षम होने के लिए ईमेल क्लाइंट की आवश्यकता होती है। एसडी कार्ड उस के लिए काम करता है, लेकिन जैसा कि आप इंगित करते हैं, अनुमानतः कोई एसडी कार्ड नहीं है। – CommonsWare

+0

एफवाईआई: लेनदेन TooLargeException अगर इरादे को पारित बहुत अधिक डेटा। – kaay