باز کردن گالری و دریافت مسیر عکس فقط با پیشنهاد دو برنامه اصلی (گالری و عکس ها)
سلام دوستان عزیز، من کدی نوشته بودم که گالری رو باز میکرد و یه عکس انتخاب میکردی و مسیر عکس رو میگرفت و مثلا میداد و به تکسچر آبجکتی که توی صحنه هست و بعد تصویر اون آبجکت توی صحنه میشد اون عکسی که از گالری انتخاب کردی و بعد از اون، یه عکسی از تصویری که توی برنامه میدیت میگرفت، شاید یه کم گیچ شدید و نفهمیدید چی گفتم، اما این کدی که من نوشته بودم کاملا سالم و درست بود و هیچ مشکلی نداشت، تا چقدر پیش که برنامم کارش تموم شد خروج نهایی گرفتم و باز یه تست زدم دیدم عکس آخر رو که میگیره و تو گالری ذخیره میکنه کلا قاطی پاتی میشه عکس و تمام شطرنجی میگیره و تعجب کردم تست کردم ببینم مشکل از کجاست، و محل وقوع حادثه رو پیدا کردم، به تصویر پایین نگاه کنید
من با کد زیر گالری گوشی رو باز میکنم
protectedvoidOpenGallery(){
Intent intent_gallery =newIntent();
intent_gallery.setType("image/*");
intent_gallery.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent_gallery, SELECT_IMAGE);
}
بعدش چنین نتیجه ایی در بر داره

حالا اگه من روی گزیننه گالری که گل زرد داره و اون عکس ها که عکس فرفره هست کلیک کنم و به وسیله اونا عکس رو انتخاب کنم عکس تو برنامه نشان داده میشه ولی عکس نهایی رو که میخواد بگیره تمام شطرنجی میشه و خراب میگیره در حالی که اگه من برنامه ES File که با رنگ پوشه آبی مشخص شده رو انتخاب کنم و عکس رو از دایرکتوری انتخاب کنم عکس توی برنامه نمایش داده میشه و عکس نهایی هم گرفته میشه و هیچ مشکلی نیست
در کل و در اصل من تا برنامه گالری و عکس ها رو از توی برنامه خودم اجرا میکنم عکس رو تم برنامه میارن اما عکس نهایی شطرنجی گرفته میشه، امیدوارم که بتونید راهنماییم کنید، قبلنا تست کرده بودم همه چی درست بود، نمیدونم باز چه دردی گرفتش، تو گوشی دیگه هم تست کردم همینجوریه، کلافه شدم، لطفا راهنمایی کنید دوستان
به روش زیر کار کنید :
گرفتن تصاویر :
Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, 200);
بعد از انتخاب عکس آدرس تصویر رو بردارید :
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//Log.i("FILE", "requestCode : " + requestCode + " resultCode : " + resultCode + " " + data.getDataString());
if (data != null) {
String fileName = data.getDataString();
File resultFile = null;
if (fileName.contains("file:///")) {
resultFile = new File(data.getDataString().replace("file:///", ""));
} else if (fileName.contains("content://")) {
resultFile = new File(getRealPathFromUri(getApplicationContext(), data.getData()));
}
//Log.i("FILE+", "" + resultFile.getName() + " " + resultFile.length() + " " + ((resultFile.length() / 1024f) / 1024f) + " MB");
if (resultFile.length() > 1048576) {
toast("حجم فایل نباید بیشتر از یک مگابایت باشد", true, false);
} else {
file = resultFile;
filePath = file.getAbsolutePath();
btnSubmit.setText("ارسال با عکس زیر");
btnSubmit.setVisibility(View.VISIBLE);
Glide.with(ActivityUpload.this).load(filePath).into(imgPreview);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
بازم سلام، من این کد بالا رو که دادید تست کردم اما به مشکل برخوردم، ببینید من قطعه کد زیر رو دارم که گالری رو باز میکنه و یه عکس انتخاب میکنی و برمیگرده به برنامه و مسیر عکس رو میده به یه متغییر با نام pathPictureGallery - فقط همین
اینم کدش که کاملا سالمه و جواب میده
protected void OpenGallery() {
Intent intent_gallery = new Intent();
intent_gallery.setType("image/*");
intent_gallery.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent_gallery, SELECT_IMAGE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == SELECT_IMAGE && resultCode == RESULT_OK && null != data) { //اگر عکس انتخاب شده بود
Uri selectedImage = data.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 picturePath = cursor.getString(columnIndex);
cursor.close();
pathPictureGallery = picturePath; // قرار دادن مسیر عکس
}
}
تنهل مشکل کد من اینه که وقتی میخواد گالری رو باز کنه بهتون برنامه های دیگه هم پیشنهاد میده، برنامه هایی مثل ES و درایور گوگل و برنامه های دیگه ایی که در تصویر بالا مشاهده میکنید، اما من میخوام مثل کدی که شما دادید فقط اون دوتا برنامه مربوطه یعنی گالری و عکس ها رو پیشنهاد بده، و کاربر به وسیله یکی از اون دوتا عکسش رو انتخاب کنه، مثل قطعه اولیه کدی که شما دادید. پایین کدی که شما دادید رو گذاشتم
Intent i =newIntent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i,200);
- حالا من قسمت اول کدم یعنی هنگامی که دستور میده گالری باز شو رو چطوری تغییر بدم که مثل کد شما فقط دو برنامه گالری و عکس ها رو پیشنهاد بده، فقط همین، متد برگشت onActivityResult که نوشتم مشکلی نداره و به درستی آدرس تصویر رو به متغیر pathPictureGallery میده، فقط اگه ممکنه قسمت اول کد که مربوط به اجرای گالری هست رو برام درست کنید که فقط برنامه گالری و عکس ها رو پیشنهاد بده، ممنون بابت راهنماییتون
برای اینکه کد قبلی شما به صورتی که میخواید کار کنه این رو تست کنید :
Intent intent_gallery = new Intent();
intent_gallery.setType("image/*");
intent_gallery.setAction(Intent.ACTION_PICK);
intent_gallery.setData(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent_gallery, 200);
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .