अद्यतन उत्तर, लगभग 5 साल बाद:
मूल उत्तर में कोड अब मज़बूती से काम नहीं करता है, क्योंकि विभिन्न स्रोतों से छवियां कभी-कभी एक अलग सामग्री यूआरआई के content://
बजाय वापस आती हैं, अर्थात file://
। एक बेहतर समाधान केवल उपयोग करने के लिए है context.getContentResolver().openInputStream(intent.getData())
, कि के रूप में एक InputStream है कि आप आपके द्वारा चुने गए के रूप में संभाल कर सकते हैं वापस आ जाएगी।
उदाहरण के लिए, BitmapFactory.decodeStream()
इस स्थिति में पूरी तरह से काम करता है, जैसा कि आप तब भी विकल्प का उपयोग कर सकते हैं और बड़ी छवियों को डाउन करने और स्मृति समस्याओं से बचने के लिए फ़ील्ड का उपयोग कर सकते हैं।
हालाँकि, Google ड्राइव जैसी चीजें URI को उन छवियों को लौटाती हैं जिन्हें वास्तव में अभी तक डाउनलोड नहीं किया गया है। इसलिए आपको बैकग्राउंड थ्रेड पर getContentResolver () कोड निष्पादित करने की आवश्यकता है।
मूल उत्तर:
दूसरे जवाबों में समझाया गया था कि इरादे कैसे भेजे जाएं, लेकिन उन्होंने अच्छी तरह से नहीं बताया कि कैसे प्रतिक्रिया को संभालना है। यहाँ कुछ नमूना कोड है कि कैसे करना है:
protected void onActivityResult(int requestCode, int resultCode,
Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch(requestCode) {
case REQ_CODE_PICK_IMAGE:
if(resultCode == RESULT_OK){
Uri selectedImage = imageReturnedIntent.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(
selectedImage, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
}
}
}
इसके बाद, आपको चयनित छवि को "yourSelectedImage" में संग्रहीत किया जाता है, जो भी आप चाहते हैं। यह कोड ContentResolver डेटाबेस में छवि का स्थान प्राप्त करके काम करता है, लेकिन यह अपने आप में पर्याप्त नहीं है। प्रत्येक छवि में लगभग 18 कॉलम होते हैं, जिसमें इसकी फ़ाइलपथ से लेकर 'तारीख अंतिम संशोधन' तक के जीपीएस निर्देशांक होते हैं, जहां फोटो ली गई थी, हालांकि कई फ़ील्ड वास्तव में उपयोग नहीं किए जाते हैं।
समय बचाने के लिए जैसा कि आपको वास्तव में अन्य क्षेत्रों की आवश्यकता नहीं है, कर्सर खोज एक फिल्टर के साथ की जाती है। फ़िल्टर आपके इच्छित स्तंभ के नाम को निर्दिष्ट करके काम करता है, MediaStore.Images.Media.DATA, जो पथ है, और फिर कर्सर स्ट्रिंग क्वेरी में उस स्ट्रिंग [] को दे रहा है। कर्सर क्वेरी पथ के साथ लौटती है, लेकिन आपको पता नहीं है कि columnIndex
कोड का उपयोग करने तक यह किस कॉलम में है । वह बस अपने नाम के आधार पर कॉलम की संख्या प्राप्त करता है, वही जो फ़िल्टरिंग प्रक्रिया में उपयोग किया जाता है। एक बार जब आप मिल जाते हैं, तो आप अंततः कोड के अंतिम पंक्ति के साथ एक बिटमैप में छवि को डीकोड करने में सक्षम होते हैं।