2009-10-09 13 views
5

एक सामग्री प्रदाता उपभोक्ता की ग्राहक के पक्ष मैं इस तरह कुछ कर सकते हैं, चित्र को पढ़ने के लिए एक उचित InputStream पाने के लिए:एक सामग्री प्रदाता से इनपुट मैप मैप किए गए मेमोरी लौट रहा है?

InputStream is = getContentResolver().openInputStream(pictureUri); 

एक अच्छा एपीआई है, और होगा सर्वर साइड पर, वास्तविक के लिए एक कॉल में सामग्री प्रदाता परिणाम:

public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { 
    // Open a proper ParcelFileDescriptor, most likely using openFileHelper(uri, mode) 
} 

लेकिन क्या होगा अगर चित्र यूआरआई पर मैप नहीं है फाइल सिस्टम पर पाया जा सकता है, लेकिन एक स्मृति संसाधन के रूप में, या जेनरेट कर दिए।

क्या मैं मेमोरी मैप किए गए मेमोरी File या InputStream, या कुछ और बना सकता हूं, ताकि मुझे डिस्क पर एक अस्थायी फ़ाइल सहेजने की आवश्यकता न हो, बस इसे मेरे सामग्री प्रदाता उपभोक्ता को वापस करने में सक्षम हो?

उत्तर

1

यह कठिन है। आप सॉकेट इंटरफ़ेस का उपयोग करने वाले किसी भी चीज़ का उपयोग करने में सक्षम हो सकते हैं। मैं यह नहीं किया है, लेकिन यह क्या मुझे ऐसा लगता है बनाता है:

http://developer.android.com/reference/android/os/ParcelFileDescriptor.html#fromSocket(java.net.Socket)

और एक सॉकेट, सिद्धांत रूप में, इंटरनेट संसाधन, या सबसे कुछ भी हो सकता है ... यदि आप करने को तैयार हैं सॉकेट स्तर पर काम करते हैं। मैं शायद छोड़ दूंगा और अस्थायी फ़ाइल बनाउंगा। शायद यह मुझे एक डरावना बनाता है।

+0

एक समाधान है कि काम हो सकता है है, लेकिन नहीं के रूप में मैं यह करना चाहता हूँ: इस सवाल का जवाब यहाँ और अधिक विस्तार के लिए देखें। मैं वास्तव में लगातार दूरस्थ डेटा के सभी प्रकार पढ़ने के लिए 'ContentResolver # openInputStream()' विधि का उपयोग करने में सक्षम होना चाहता हूँ। भले ही सर्वर डेटा बनाता/बनाता है। यह क्लाइंट को सर्वर कार्यान्वयन को उजागर करने का सवाल नहीं है। – PeyloW

+0

आप इस के लिए एक समाधान @PeyloW पता चला? मैं भी एक समाधान की तलाश में हूँ। – Sunny

+0

@ सनी कोई नहीं हैक हैक नहीं है। तो मैं अस्थायी फ़ाइलों को बचाने और फ़ाइल वर्णनकर्ता भेज दिया। – PeyloW

1

एंड्रॉयड-9 के रूप में, आप ParcelFileDescriptor का उपयोग कर एक पाइप कर सकते हैं। आप इसमें 64k तक सामान रख सकते हैं और इसके साथ किया जा सकता है, या आप पढ़ने के बाद इसे भरने के लिए एक और धागा सेट कर सकते हैं।

Custom ContentProvider - openInputStream(), openOutputStream()

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