آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

باز کردن گالری و دریافت مسیر عکس فقط با پیشنهاد دو برنامه اصلی (گالری و عکس ها)

Amin Games  10 سال پیش  10 سال پیش
0 0

سلام دوستان عزیز، من کدی نوشته بودم که گالری رو باز میکرد و یه عکس انتخاب میکردی و مسیر عکس رو میگرفت و مثلا میداد و به تکسچر آبجکتی که توی صحنه هست و بعد تصویر اون آبجکت توی صحنه میشد اون عکسی که از گالری انتخاب کردی و بعد از اون، یه عکسی از تصویری که توی برنامه میدیت میگرفت، شاید یه کم گیچ شدید و نفهمیدید چی گفتم، اما این کدی که من نوشته بودم کاملا سالم و درست بود و هیچ مشکلی نداشت، تا چقدر پیش که برنامم کارش تموم شد خروج نهایی گرفتم و باز یه تست زدم دیدم عکس آخر رو که میگیره و تو گالری ذخیره میکنه کلا قاطی پاتی میشه عکس و تمام شطرنجی میگیره و تعجب کردم تست کردم ببینم مشکل از کجاست، و محل وقوع حادثه رو پیدا کردم، به تصویر پایین نگاه کنید

من با کد زیر گالری گوشی رو باز میکنم

protectedvoidOpenGallery(){
Intent intent_gallery =newIntent();
intent_gallery.setType("image/*");
intent_gallery.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent_gallery, SELECT_IMAGE);
}

بعدش چنین نتیجه ایی در بر داره

حالا اگه من روی گزیننه گالری که گل زرد داره و اون عکس ها که عکس فرفره هست کلیک کنم و به وسیله اونا عکس رو انتخاب کنم عکس تو برنامه نشان داده میشه ولی عکس نهایی رو که میخواد بگیره تمام شطرنجی میشه و خراب میگیره در حالی که اگه من برنامه ES File که با رنگ پوشه آبی مشخص شده رو انتخاب کنم و عکس رو از دایرکتوری انتخاب کنم عکس توی برنامه نمایش داده میشه و عکس نهایی هم گرفته میشه و هیچ مشکلی نیست

در کل و در اصل من تا برنامه گالری و عکس ها رو از توی برنامه خودم اجرا میکنم عکس رو تم برنامه میارن اما عکس نهایی شطرنجی گرفته میشه، امیدوارم که بتونید راهنماییم کنید، قبلنا تست کرده بودم همه چی درست بود، نمیدونم باز چه دردی گرفتش، تو گوشی دیگه هم تست کردم همینجوریه، کلافه شدم، لطفا راهنمایی کنید دوستان

 

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
Criss  10 سال پیش
+2 0

به روش زیر کار کنید :

گرفتن تصاویر :

 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);
}

 

+1 0
ممنون Criss جان، با اینکه مشکل اصلی من این نبود، و در کل درهم آمیختگی و قاطی پاتی شدن عکسها بخاطر دو گزینه ایی بود که من فعال کرده بودم و رو خروجی تاثیر داشت، البته این گزینه هایی که میگم مربوط به خروجی یونیتی هستند نه ایکلیپس، گزینه هایی با نام های (GPU Skinning و Multithreaded Rendering) البته از اینها بگذریم خیلی ممنون که این قطعه کد رو بهم دادی، چون من اون قطعه اولشو که تست کردم خیلی بهتر از کد خودم گالری رو باز میکنه و برنامه های نامربوط دیگه رو باز نمیکنه، این خیلی خوبه، این قطعه کد رو تست میکنم اگه مشکلی داشتم همین جا مطرح میکنم، سپاس و تشکر از شما (10 سال پیش)
پاسخ به سوال 
Amin Games  10 سال پیش
0 0

بازم سلام، من این کد بالا رو که دادید تست کردم اما به مشکل برخوردم، ببینید من قطعه کد زیر رو دارم که گالری رو باز میکنه و یه عکس انتخاب میکنی و برمیگرده به برنامه و مسیر  عکس رو میده به یه متغییر با نام 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);
  1. حالا من قسمت اول کدم یعنی هنگامی که دستور میده گالری باز شو رو چطوری تغییر بدم که مثل کد شما فقط دو برنامه گالری و عکس ها رو پیشنهاد بده، فقط همین، متد برگشت onActivityResult که نوشتم مشکلی نداره و به درستی آدرس تصویر رو به متغیر pathPictureGallery  میده، فقط اگه ممکنه قسمت اول کد که مربوط به اجرای گالری هست رو برام درست کنید که فقط برنامه گالری و عکس ها رو پیشنهاد بده، ممنون بابت راهنماییتون

 

 

+1 0
خب این مربوط به خود گوشی تلفن همراه میشه در واقع اون برنامه ها مثل Es File Explorer قابلیت انتخاب عکس و در عین حال تصویر رو دارن از این نظر فکر نمیکنم مشکل خاصی باشه . (10 سال پیش)
0 0
خب میدونم مشکلی نیست، اما برنامه های اضافی دیگه ایی هم باز میکنه که اصلا فکر نکنم لازم باشه و نمیتونه از داخلشون آدرس عکس دریافت کنه، مثلا برنامه Drive داخل همه گوشی ها هست و لازم که این برنامه Drive رو واسه باز کردن عکس پیشنهاد بده. یعنی مگه میشه این کار نشه؟! (10 سال پیش)
0 0
خب میدونم مشکلی نیست، اما برنامه های اضافی دیگه ایی هم باز میکنه که اصلا فکر نکنم لازم باشه و نمیتونه از داخلشون آدرس عکس دریافت کنه، مثلا برنامه Drive داخل همه گوشی ها هست و لازم نیست که این برنامه Drive رو واسه باز کردن عکس پیشنهاد بده. یعنی مگه میشه این کار نشه؟! (10 سال پیش)
پاسخ به سوال 
Criss  10 سال پیش
+1 0

برای اینکه کد قبلی شما به صورتی که میخواید کار کنه این رو تست کنید :

 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);

 

0 0
ممنون Criss جان، کدی که دادی رو با یه تغییر کوچیک درستش کردم، بجای عدد 200 که گذاشتی من همون SELECT_IMAGE رو نوشتم، تست کردم جواب داد، مرسی و تشکر فراوان از شما دوست گرامی و همه عزیزان (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .