গ্যালারী বা ক্যামেরা থেকে চিত্র বাছতে ডায়ালগ


122

ক্যামেরা থেকে কোনও ছবি বাছাই বা গ্যালারী থেকে (বিল্ট-ইন ফোন বই বা স্কাইপ এর মতো) চয়ন করার সাথে ডায়লগ বক্সে কল করার কোনও স্ট্যান্ডার্ড উপায় আছে কি?

আমি কটাক্ষপাত গ্রহণ করেছি এই কিন্তু কোড ক্যামেরা থেকে এটা নিতে পরামর্শ ছাড়া গ্যালারি প্রর্দশিত হবে।

ডিভাইস: স্যামসাং গ্যালাক্সি ট্যাব
অ্যান্ড্রয়েড: ২.৩.৩


এই উত্তরটির দিকে একবার নজর দিন যা উভয় অনুরোধকে (ক্যামেরা এবং গ্যালারী) এক অনন্য উদ্দেশ্যতে মার্জ করে: stackoverflow.com/a/32475805/2232889
মারিও ভেলাস্কো

উত্তর:


192

নীচের কোডটি একটি ছবি তোলার জন্য এবং একটি ছবি বাছাইয়ের জন্য ব্যবহার করা যেতে পারে। দুটি বিকল্পের সাথে এবং নির্বাচনের পরে একটি সংলাপ দেখান, উপযুক্ত কোডটি ব্যবহার করুন।

ক্যামেরা থেকে ছবি তোলার জন্য:

Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePicture, 0);//zero can be replaced with any action code (called requestCode)

গ্যালারী থেকে ফটো বাছাই করতে:

Intent pickPhoto = new Intent(Intent.ACTION_PICK,
           android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto , 1);//one can be replaced with any action code

onActivityResult কোড:

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
    switch(requestCode) {
    case 0:
        if(resultCode == RESULT_OK){  
            Uri selectedImage = imageReturnedIntent.getData();
            imageview.setImageURI(selectedImage);
        }

    break; 
    case 1:
        if(resultCode == RESULT_OK){  
            Uri selectedImage = imageReturnedIntent.getData();
            imageview.setImageURI(selectedImage);
        }
    break;
    }
}

অবশেষে ম্যানিফেস্ট ফাইলটিতে এই অনুমতিটি যুক্ত করুন:

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

20
ক্যামেরা অনুমতিগুলির দরকার নেই কারণ এটি ডিফল্ট অ্যাপ্লিকেশনটি খোলায়।
তাসোমানিয়াক

2
@ জেরেমি না এটি ভুল। আপনার কাছে যদি অনুমতি না থাকে তবে আপনি এটি ব্যবহার করতে পারেন। কারণ এটি আপনার অ্যাপ্লিকেশনটি ক্যামেরা খোলার নয়। উপকারটি হ'ল যদি আপনার অনুমতি থাকে এবং যদি ব্যবহারকারী অনুমতিটি প্রত্যাখ্যান করে, তবে Intentফলব্যাক হিসাবে এটি ব্যবহার করে সিকিউরিটি এক্সসেপশনকে ছুঁড়ে দেয়। আরো তথ্য: plus.google.com/+AndroidDevelopers/posts/e9kyM7VXajz
tasomaniac

2
@ টাসোমানিয়াক ক্যামেরা অভিপ্রায় খোলার জন্য এখন ক্যামেরা অনুমতি প্রয়োজন
সাদ বিলাল

26
ACTION_IMAGE_CAPTURE দিয়ে আমি চিত্রটি রিটার্নড ইন্টেন্ট.জেডডাটা () == নাল কেন পাই?
Xan

3
অফিসিয়াল ডকুমেন্টেশন বিকাশকারী অনুসারে.অ্যান্ড্রয়েড / ট্রেনিং / ক্যামেরা / ফোটোব্যাসিকগুলি ছবি তুললে উরিতে চিত্র সংরক্ষণ হয় না গেটডাটা () এর উদ্দেশ্য থেকে ফিরে আসে। আপনি কেবল ফলাফলের উদ্দেশ্যে (থাম্ব.জেটবান্ডেল ()। পেতে ("ডেটা)) থেকে থাম্বনেইল পেতে পারেন .আর্টিভিটি ফর রিসাল্ট বলার আগে এই উদ্দেশ্যে প্রস্তুত ফাইলের জন্য পূর্ণ আকারের চিত্র লেখা যেতে পারে
marioc64

56

গ্যালারী বা ক্যামেরা থেকে কোনও চিত্র বাছাইয়ের জন্য সম্পূর্ণ ব্যবহার করতে আমি কিছু সমাধান মার্জ করেছি। এগুলো বৈশিষ্ট্য সারকথা util ImagePicker (এছাড়াও একটি গিটহাব liberal এর সংক্ষিপ্ত রূপ ):

  • গ্যালারী এবং ক্যামেরার পুনঃসূচনাগুলির জন্য মার্জড ইন্টেন্টগুলি।
  • নির্বাচিত বড় চিত্রগুলির আকার পরিবর্তন করুন (উদা: 2500 x 1600)
  • প্রয়োজনে চিত্রটি ঘোরান

স্ক্রীনশট:

ইমেজপিকার শুরু করার অভিপ্রায়

সম্পাদনা করুন : গ্যালারী এবং ক্যামেরা অ্যাপ্লিকেশনগুলির জন্য একত্রীকরণের জন্য ইন্টেন্টটি মিশ্রিত করার জন্য এখানে কোডের একটি খণ্ড রয়েছে। আপনি পূর্ণ কোড দেখতে পারেন সারকথা util ImagePicker (এছাড়াও একটি গিটহাব liberal এর সংক্ষিপ্ত রূপ ):

public static Intent getPickImageIntent(Context context) {
    Intent chooserIntent = null;

    List<Intent> intentList = new ArrayList<>();

    Intent pickIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    takePhotoIntent.putExtra("return-data", true);
    takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(getTempFile(context)));
    intentList = addIntentsToList(context, intentList, pickIntent);
    intentList = addIntentsToList(context, intentList, takePhotoIntent);

    if (intentList.size() > 0) {
        chooserIntent = Intent.createChooser(intentList.remove(intentList.size() - 1),
                context.getString(R.string.pick_image_intent_text));
        chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentList.toArray(new Parcelable[]{}));
    }

    return chooserIntent;
}

private static List<Intent> addIntentsToList(Context context, List<Intent> list, Intent intent) {
    List<ResolveInfo> resInfo = context.getPackageManager().queryIntentActivities(intent, 0);
    for (ResolveInfo resolveInfo : resInfo) {
        String packageName = resolveInfo.activityInfo.packageName;
        Intent targetedIntent = new Intent(intent);
        targetedIntent.setPackage(packageName);
        list.add(targetedIntent);
    }
    return list;
}

4
এটা পুরোপুরি কাজ করে, মারিও। তোমাকে অনেক ধন্যবাদ! আমি একটি স্যামসং জি.টি.- I9100, একটি এলজি L7 এটা পরীক্ষিত, কিন্তু এটা ব্যর্থ হলে আমরা অ্যান্ড্রয়েড 6. সমাধান সঙ্গে একটি নেক্সাস 6 ক্যামেরা থেকে ইমেজ লাগাতে ImagePicker.java আপনার 58 লাইন এই যোগ হবে চেষ্টা করুন:boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null);
গাবী মোরেনো

1
আপনাকে @ গ্যাব্রিয়েলমোরেনোআইবারাকে ধন্যবাদ। আপনি এটি ঠিক করেছেন, এখন এটি আমার কোডেও রয়েছে।
মারিও ভেলাস্কো

কি getTempFileএবং কিভাবে এই ফাংশন ব্যবহার করতে হয়? দয়া করে উত্তরটি আপডেট করুন
বশির আল-মোমানী

1
একটি অস্থায়ী ফাইল পাওয়ার জন্য এটি একটি ফাংশন। লিঙ্কটি একবার দেখুন এবং আপনি আরও বিস্তারিত স্ক্রিপ্টটি পেয়ে যাবেন
মারিও ভেলাস্কো

1
@ ব্রেনওয়্যার, হ্যাঁ, এটি অ্যান্ড্রয়েড সংস্করণে নির্ভর করে। FileProviderAPI> = 23 এবং এর Uriচেয়ে কম ব্যবহারের জন্য বিবেচনা করুন ।
কুলমাইন্ড

19

এই গ্রন্থাগারটি সহজ করে তোলে।

শুধু কল:

PickImageDialog.on(MainActivity.this, new PickSetup(BuildConfig.APPLICATION_ID));

তারপরে আপনার ক্রিয়াকলাপটি আইপিকআরসাল্ট বাস্তবায়ন করুন এবং নীচের পদ্ধতিটিকে ওভাররাইড করুন।

@Override
public void onPickResult(PickResult r) {
    if (r.getError() == null) {
        imageView.setImageBitmap(r.getBitmap());

        //or

        imageView.setImageURI(r.getUri());
    } else {
        //Handle possible errors
        //TODO: do what you have to do with r.getError();
    }
}

আমার ফোনের এস 7 প্রান্তে অ্যামাজন ফটো রয়েছে যখনই আমি গ্যালারী বিকল্পটি নির্বাচন করি এটি আমাজন লগইন পৃষ্ঠায় এবং অন্য ফোনে এটির সূক্ষ্ম দিকে পুনঃনির্দেশিত করে .. তবে আমি এস 7 প্রান্তে পরীক্ষা করছি
নাফিজ আহমেদ

এটি খুব অগোছালো পদ্ধতির, পুরো কোডকে প্রভাবিত করতে পারে। লোকটি আলাদা এমভিএন রেপো তৈরি করল কেন জানি না।
জয়

এটি কি বহু-নির্বাচন বা মাল্টি-ক্যাপচার চিত্রগুলিকে অনুমতি দেয়?
আদনান

12

গ্যালারী বা ক্যামেরা থেকে চিত্র নির্বাচন করতে আপনি এই কোডটি প্রয়োগ করতে পারেন: -

private ImageView imageview;
private Button btnSelectImage;
private Bitmap bitmap;
private File destination = null;
private InputStream inputStreamImg;
private String imgPath = null;
private final int PICK_IMAGE_CAMERA = 1, PICK_IMAGE_GALLERY = 2;

এখন বোতাম ক্লিক ইভেন্টে, আপনি আপনার নির্বাচিত চিত্রের পদ্ধতিতে কল করতে পারবেন। এটি ক্রিয়াকলাপের অনক্রিটের অভ্যন্তরে।

imageview = (ImageView) findViewById(R.id.imageview);
btnSelectImage = (Button) findViewById(R.id.btnSelectImage);

//OnbtnSelectImage click event...
btnSelectImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            selectImage();
        }
    });

আপনার ক্রিয়াকলাপের বাড়ির বাইরে

// Select image from camera and gallery
private void selectImage() {
    try {
        PackageManager pm = getPackageManager();
        int hasPerm = pm.checkPermission(Manifest.permission.CAMERA, getPackageName());
        if (hasPerm == PackageManager.PERMISSION_GRANTED) {
            final CharSequence[] options = {"Take Photo", "Choose From Gallery","Cancel"};
            android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(activity);
            builder.setTitle("Select Option");
            builder.setItems(options, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int item) {
                    if (options[item].equals("Take Photo")) {
                        dialog.dismiss();
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        startActivityForResult(intent, PICK_IMAGE_CAMERA);
                    } else if (options[item].equals("Choose From Gallery")) {
                        dialog.dismiss();
                        Intent pickPhoto = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                        startActivityForResult(pickPhoto, PICK_IMAGE_GALLERY);
                    } else if (options[item].equals("Cancel")) {
                        dialog.dismiss();
                    }
                }
            });
            builder.show();
        } else
            Toast.makeText(this, "Camera Permission error", Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        Toast.makeText(this, "Camera Permission error", Toast.LENGTH_SHORT).show();
        e.printStackTrace();
    }
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    inputStreamImg = null;
    if (requestCode == PICK_IMAGE_CAMERA) {
        try {
            Uri selectedImage = data.getData();
            bitmap = (Bitmap) data.getExtras().get("data");
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bytes);

            Log.e("Activity", "Pick from Camera::>>> ");

            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(new Date());
            destination = new File(Environment.getExternalStorageDirectory() + "/" +
                    getString(R.string.app_name), "IMG_" + timeStamp + ".jpg");
            FileOutputStream fo;
            try {
                destination.createNewFile();
                fo = new FileOutputStream(destination);
                fo.write(bytes.toByteArray());
                fo.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

            imgPath = destination.getAbsolutePath();
            imageview.setImageBitmap(bitmap);

        } catch (Exception e) {
            e.printStackTrace();
        }
    } else if (requestCode == PICK_IMAGE_GALLERY) {
        Uri selectedImage = data.getData();
        try {
            bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 50, bytes);
            Log.e("Activity", "Pick from Gallery::>>> ");

            imgPath = getRealPathFromURI(selectedImage);
            destination = new File(imgPath.toString());
            imageview.setImageBitmap(bitmap);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

public String getRealPathFromURI(Uri contentUri) {
    String[] proj = {MediaStore.Audio.Media.DATA};
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

অ্যাটলাস্ট, শেষ পর্যন্ত ক্যামেরা যুক্ত করুন এবং অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএলে বাহ্যিক স্টোরেজ অনুমতি লিখুন

এটি আমার পক্ষে ব্যাপকভাবে কাজ করে, আশা করি এটি আপনার জন্যও কার্যকর হবে।


1
আমি ক্যামেরার অনুমতি
জুড়েছি

7

আমি মনে করি এটি বেছে নেওয়ার জন্য সেই ডায়ালগটি দেখানো আপনার পক্ষে। গ্যালারি জন্য আপনি যে কোড ব্যবহার করব এবং ক্যামেরা জন্য চেষ্টা এই


1
তবে চিত্রটি এই নমুনায় উল্টে যায়
সানি

3

আপনি যদি গ্যালারী থেকে চিত্রটি পেতে চান বা চিত্রটি ক্যাপচার করতে এবং প্রতিকৃতি মোডে চিত্র দর্শনে সেট করতে চান তবে নিম্নলিখিত কোডটি আপনাকে সহায়তা করবে ..

অনক্রিটে ()

imageViewRound.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            selectImage();
        }
    });




    private void selectImage() {
    Constants.iscamera = true;
    final CharSequence[] items = { "Take Photo", "Choose from Library",
            "Cancel" };

     TextView title = new TextView(context);
     title.setText("Add Photo!");
        title.setBackgroundColor(Color.BLACK);
        title.setPadding(10, 15, 15, 10);
        title.setGravity(Gravity.CENTER);
        title.setTextColor(Color.WHITE);
        title.setTextSize(22);


    AlertDialog.Builder builder = new AlertDialog.Builder(
            AddContactActivity.this);



    builder.setCustomTitle(title);

    // builder.setTitle("Add Photo!");
    builder.setItems(items, new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int item) {
            if (items[item].equals("Take Photo")) {
                // Intent intent = new
                // Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                Intent intent = new Intent(
                        android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                /*
                 * File photo = new
                 * File(Environment.getExternalStorageDirectory(),
                 * "Pic.jpg"); intent.putExtra(MediaStore.EXTRA_OUTPUT,
                 * Uri.fromFile(photo)); imageUri = Uri.fromFile(photo);
                 */
                // startActivityForResult(intent,TAKE_PICTURE);

                Intent intents = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

                intents.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

                // start the image capture Intent
                startActivityForResult(intents, TAKE_PICTURE);

            } else if (items[item].equals("Choose from Library")) {
                Intent intent = new Intent(
                        Intent.ACTION_PICK,
                        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                intent.setType("image/*");
                startActivityForResult(
                        Intent.createChooser(intent, "Select Picture"),
                        SELECT_PICTURE);
            } else if (items[item].equals("Cancel")) {
                dialog.dismiss();
            }
        }
    });
    builder.show();
}




    @SuppressLint("NewApi")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {
    case SELECT_PICTURE:
        Bitmap bitmap = null;
        if (resultCode == RESULT_OK) {
            if (data != null) {


                try {
                    Uri selectedImage = data.getData();
                    String[] filePath = { MediaStore.Images.Media.DATA };
                    Cursor c = context.getContentResolver().query(
                            selectedImage, filePath, null, null, null);
                    c.moveToFirst();
                    int columnIndex = c.getColumnIndex(filePath[0]);
                    String picturePath = c.getString(columnIndex);
                    c.close();
                    imageViewRound.setVisibility(View.VISIBLE);
                    // Bitmap thumbnail =
                    // (BitmapFactory.decodeFile(picturePath));
                    Bitmap thumbnail = decodeSampledBitmapFromResource(
                            picturePath, 500, 500);

                    // rotated
                    Bitmap thumbnail_r = imageOreintationValidator(
                            thumbnail, picturePath);
                    imageViewRound.setBackground(null);
                    imageViewRound.setImageBitmap(thumbnail_r);
                    IsImageSet = true;
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

        break;
    case TAKE_PICTURE:
        if (resultCode == RESULT_OK) {

            previewCapturedImage();

        }

        break;
    }

}



 @SuppressLint("NewApi")
private void previewCapturedImage() {
    try {
        // hide video preview

        imageViewRound.setVisibility(View.VISIBLE);

        // bimatp factory
        BitmapFactory.Options options = new BitmapFactory.Options();

        // downsizing image as it throws OutOfMemory Exception for larger
        // images
        options.inSampleSize = 8;

        final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(),
                options);

        Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, 500, 500,
                false);

        // rotated
        Bitmap thumbnail_r = imageOreintationValidator(resizedBitmap,
                fileUri.getPath());

        imageViewRound.setBackground(null);
        imageViewRound.setImageBitmap(thumbnail_r);
        IsImageSet = true;
        Toast.makeText(getApplicationContext(), "done", Toast.LENGTH_LONG)
                .show();
    } catch (NullPointerException e) {
        e.printStackTrace();
    }
}






    // for roted image......
private Bitmap imageOreintationValidator(Bitmap bitmap, String path) {

    ExifInterface ei;
    try {
        ei = new ExifInterface(path);
        int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                ExifInterface.ORIENTATION_NORMAL);
        switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_90:
            bitmap = rotateImage(bitmap, 90);
            break;
        case ExifInterface.ORIENTATION_ROTATE_180:
            bitmap = rotateImage(bitmap, 180);
            break;
        case ExifInterface.ORIENTATION_ROTATE_270:
            bitmap = rotateImage(bitmap, 270);
            break;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    return bitmap;
}



private Bitmap rotateImage(Bitmap source, float angle) {

    Bitmap bitmap = null;
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);
    try {
        bitmap = Bitmap.createBitmap(source, 0, 0, source.getWidth(),
                source.getHeight(), matrix, true);
    } catch (OutOfMemoryError err) {
        source.recycle();
        Date d = new Date();
        CharSequence s = DateFormat
                .format("MM-dd-yy-hh-mm-ss", d.getTime());
        String fullPath = Environment.getExternalStorageDirectory()
                + "/RYB_pic/" + s.toString() + ".jpg";
        if ((fullPath != null) && (new File(fullPath).exists())) {
            new File(fullPath).delete();
        }
        bitmap = null;
        err.printStackTrace();
    }
    return bitmap;
}




public static Bitmap decodeSampledBitmapFromResource(String pathToFile,
        int reqWidth, int reqHeight) {

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(pathToFile, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth,
            reqHeight);

    Log.e("inSampleSize", "inSampleSize______________in storage"
            + options.inSampleSize);
    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeFile(pathToFile, options);
}




public static int calculateInSampleSize(BitmapFactory.Options options,
        int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        // Calculate ratios of height and width to requested height and
        // width
        final int heightRatio = Math.round((float) height
                / (float) reqHeight);
        final int widthRatio = Math.round((float) width / (float) reqWidth);

        // Choose the smallest ratio as inSampleSize value, this will
        // guarantee
        // a final image with both dimensions larger than or equal to the
        // requested height and width.
        inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;

    }

    return inSampleSize;
}




public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}






private static File getOutputMediaFile(int type) {

    // External sdcard location
    File mediaStorageDir = new File(
            Environment
                    .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
            IMAGE_DIRECTORY_NAME);

    // Create the storage directory if it does not exist
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create "
                    + IMAGE_DIRECTORY_NAME + " directory");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
            Locale.getDefault()).format(new Date());
    File mediaFile;
    if (type == MEDIA_TYPE_IMAGE) {
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + timeStamp + ".jpg");
    } else {
        return null;
    }

    return mediaFile;
}






public Uri getOutputMediaFileUri(int type) {
    return Uri.fromFile(getOutputMediaFile(type));
}

আশা করি এটা তোমাকে সাহায্য করবে....!!!

যদি টার্গেটএসডিভি ভার্সনটি 24 এর চেয়ে বেশি হয়, তবে ফাইলপ্রভাইডার অ্যাক্সেস দেওয়ার জন্য ব্যবহৃত হয়।

একটি এক্সএমএল ফাইল তৈরি করুন (পথ: রেস \ এক্সএমএল) প্রদানকারী_paths.xML

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>

AndroidManifest.xML এ একটি সরবরাহকারী যুক্ত করুন

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.provider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>

এবং প্রতিস্থাপন

return Uri.fromFile(getOutputMediaFile(type));

প্রতি

               return FileProvider.getUriForFile(this,  BuildConfig.APPLICATION_ID + ".provider", getOutputMediaFile(type));
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.