প্রায় 5 বছর পরে উত্তর আপডেট হয়েছে:
মূল উত্তরের কোডটি আর নির্ভরযোগ্যতার সাথে কাজ করে না, কারণ বিভিন্ন উত্স থেকে প্রাপ্ত চিত্রগুলি মাঝে মাঝে ভিন্ন সামগ্রী ইউআরআই দিয়ে আসে, content://
তার চেয়ে বেশি file://
। আরও ভাল সমাধান হ'ল সহজভাবে ব্যবহার করা context.getContentResolver().openInputStream(intent.getData())
, কারণ এটি এমন একটি ইনপুট স্ট্রিম ফিরিয়ে দেবে যা আপনি পছন্দ হিসাবে পরিচালনা করতে পারেন।
উদাহরণস্বরূপ, BitmapFactory.decodeStream()
এই পরিস্থিতিতে নিখুঁতভাবে কাজ করে, যেমন আপনি পরে বড় চিত্রগুলিকে ডাউনসাম্পল করতে এবং মেমরির সমস্যাগুলি এড়াতে বিকল্পগুলি এবং ইনস্যাম্পল সাইজ ক্ষেত্রটিও ব্যবহার করতে পারেন।
তবে গুগল ড্রাইভের মতো জিনিসগুলি ইউআরআইগুলিকে চিত্রগুলিতে ফিরিয়ে দেয় যা আসলে ডাউনলোড করা হয়নি। অতএব আপনাকে পটভূমির থ্রেডে 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);
}
}
}
এর পরে, আপনি যা চান তা করতে আপনার "আপনার নির্বাচিত চিত্র" এ সঞ্চিত নির্বাচিত চিত্র পেয়েছেন। এই কোডটি ContentResolver ডাটাবেসে চিত্রটির অবস্থান পেয়ে কাজ করে, তবে এটি নিজেরাই যথেষ্ট নয়। প্রতিটি চিত্রের প্রায় 18 টি কলাম রয়েছে তথ্যের ফাইলপথ থেকে 'শেষ তারিখের সংশোধিত তারিখ' অবধি যেখানে ছবি তোলা হয়েছিল তার জিপিএস স্থানাঙ্ক পর্যন্ত, যদিও ক্ষেত্রের বেশিরভাগ ক্ষেত্র প্রকৃতপক্ষে ব্যবহৃত হয় না।
আপনার অন্যান্য ক্ষেত্রের প্রয়োজন না হওয়ায় সময় বাঁচানোর জন্য কার্সার অনুসন্ধান ফিল্টার দিয়ে করা হয়। ফিল্টারটি আপনার পছন্দসই কলামের নাম, মিডিয়াস্টোর.আইমেজস.মিডিয়া.ডেটা উল্লেখ করে এবং সেই পথটি [] ব্যবহার করে কার্সার কোয়েরিতে এই স্ট্রিং [] সরবরাহ করে কাজ করে। কার্সার ক্যোয়ারীটি সেই পথটি দিয়ে ফিরে আসে, তবে আপনি columnIndex
কোডটি ব্যবহার না করা পর্যন্ত কোন কলামে তা জানেন না । এটি কেবল তার নামের উপর ভিত্তি করে কলামের নম্বর পায়, ফিল্টারিংয়ের ক্ষেত্রে একই ব্যবহার করা হয়। একবার আপনি এটি পেয়ে গেলে আপনি শেষ অবধি আমার দেওয়া কোডের শেষ লাইনটি দিয়ে বিটম্যাপে চিত্রটি ডিকোড করতে সক্ষম হবেন।