ব্যবহারকারীকে চিত্রের জন্য ক্যামেরা বা গ্যালারী নির্বাচন করতে অনুমতি দিন


151

আমি যা করার চেষ্টা করছি তা খুব সহজ বলে মনে হচ্ছে, তবে কয়েকদিন অনুসন্ধানের পরেও আমি এটি বেশ বের করতে পারি না।

আমার কাছে এমন একটি অ্যাপ্লিকেশন রয়েছে যা ব্যবহারকারীর একাধিক (৫ টি পর্যন্ত) চিত্র নির্বাচন করতে দেয়। আমি একটি ব্যবহার করছি ImageView। ব্যবহারকারী যখন ক্লিক করে ImageView, আমি তাদের বিকল্পটিতে অনুমতি দিতে চাই

  1. গ্যালারী থেকে চিত্র নির্বাচন করুন, বা
  2. একটি চিত্র ক্যাপচার করতে ক্যামেরা ব্যবহার করুন।

আমি ACTION_GET_CONTENTঅভিপ্রায়টি ব্যবহার করে শুরু করেছি এবং এটি গ্যালারিতে যাওয়ার জন্য ভাল কাজ করে। তাই আমি ACTION_PICK_ACTIVITYব্যবহারকারীকে ক্যামেরা বা গ্যালারী বেছে নেওয়ার অনুমতি দেওয়ার অভিপ্রায়টি ব্যবহার করে চেষ্টা করেছি :

Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
gallIntent.setType("image/*"); 
Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE");
pickIntent.putExtra(Intent.EXTRA_INTENT, camIntent);
pickIntent.putExtra(Intent.EXTRA_INTENT, gallIntent)
pickIntent.putExtra(Intent.EXTRA_TITLE, "Select Source");
startActivityForResult(pickIntent, IMAGE_SELECTOR);

তবে দেখা যাচ্ছে আমি কেবল একটি যুক্ত করতে পারি EXTRA_INTENT। মেনুটি প্রত্যাশিত হিসাবে প্রদর্শিত হবে, তবে কেবলমাত্র বিকল্পগুলি গ্যালারী এবং ফাইলগুলি .... কোনও ক্যামেরা নেই)।

আমি অনুপস্থিত এটি করার কি আরও ভাল / সহজ উপায় আছে? কোন সাহায্যের জন্য ধন্যবাদ।


এফওয়াইআই অনুরূপ উত্তর, নীচে ডেভিডের দুর্দান্ত উত্তরের পরিপূরক। stackoverflow.com/a/11676554/294884 আবার ধন্যবাদ সবার কাছ থেকে ডেভিড !!!
ফ্যাটি

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

সরল: মত একটি লাইব্রেরি ব্যবহার এই
ভানসুইটা জুনিয়র

উত্তর:


31

উভয় অভিপ্রায় রেজোলিউশনের ফলাফলকে মার্জ করে আপনাকে নিজের পছন্দকারী ডায়ালগ তৈরি করতে হবে।

এটি করার জন্য, আপনাকে উভয় মূল উদ্দেশ্যগুলির জন্য প্যাকেজ ম্যানেজারের সাথে প্যাকেজ ম্যানেজারটি জিজ্ঞাসা করতে হবে এবং প্রতিটি পুনরুদ্ধারকৃত ক্রিয়াকলাপের জন্য একটি নতুন ইন্টেন্ট সহ সম্ভাব্য ইন্টেন্টগুলির চূড়ান্ত তালিকা তৈরি করতে হবে:

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

List<ResolveInfo> listCam = packageManager.queryIntentActivities(camIntent, 0);
for (ResolveInfo res : listCam) {
    final Intent finalIntent = new Intent(camIntent);
    finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    yourIntentsList.add(finalIntent);
}

List<ResolveInfo> listGall = packageManager.queryIntentActivities(gallIntent, 0);
for (ResolveInfo res : listGall) {
    final Intent finalIntent = new Intent(gallIntent);
    finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
    yourIntentsList.add(finalIntent);
}

(আমি এটি সরাসরি এখানে লিখেছি যাতে এটি সংকলন নাও করতে পারে)

তারপরে, একটি তালিকা থেকে একটি কাস্টম ডায়ালগ তৈরি করতে আরও তথ্যের জন্য https://developer.android.com/guide/topics/ui/dialogs.html#AlertDialog দেখুন


321

গ্যালারী বা ক্যামেরা থেকে বা ফাইল সিস্টেম ব্রাউজ করার জন্য নিবন্ধিত কোনও অ্যাপ্লিকেশন থেকে চিত্র নির্বাচন করতে কীভাবে একটি একক অভিপ্রায় চালু করতে হয়।

ইন্টেন্ট বিকল্পগুলির একটি তালিকা সহ একটি ডায়ালগ তৈরি করার পরিবর্তে, বিভিন্ন 'ক্যামেরা', 'গ্যালারী' এবং এমনকি তৃতীয় পক্ষের ফাইল সিস্টেম ব্রাউজার অ্যাপ্লিকেশনগুলির গ্রাফিকাল আইকন এবং সংক্ষিপ্ত নামগুলিতে অ্যাক্সেস পেতে ইনটেন্ট সিআরএইচুসার ব্যবহার করা আরও ভাল is যেমন 'অ্যাস্ট্রো' ইত্যাদি

এটি স্ট্যান্ডার্ড চয়নকারী-অভিপ্রায়টি কীভাবে ব্যবহার করতে পারে এবং এতে অতিরিক্ত ইন্টেন্ট যুক্ত করতে পারে তা বর্ণনা করে।

private Uri outputFileUri;

private void openImageIntent() {

    // Determine Uri of camera image to save.
    final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MyDir" + File.separator);
    root.mkdirs();
    final String fname = Utils.getUniqueImageFilename();
    final File sdImageMainDirectory = new File(root, fname);
    outputFileUri = Uri.fromFile(sdImageMainDirectory);

    // Camera.
    final List<Intent> cameraIntents = new ArrayList<Intent>();
    final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    final PackageManager packageManager = getPackageManager();
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
    for(ResolveInfo res : listCam) {
        final String packageName = res.activityInfo.packageName;
        final Intent intent = new Intent(captureIntent);
        intent.setComponent(new ComponentName(packageName, res.activityInfo.name));
        intent.setPackage(packageName);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        cameraIntents.add(intent);
    }

    // Filesystem.
    final Intent galleryIntent = new Intent();
    galleryIntent.setType("image/*");
    galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

    // Chooser of filesystem options.
    final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");

    // Add the camera options.
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[cameraIntents.size()]));

    startActivityForResult(chooserIntent, YOUR_SELECT_PICTURE_REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == YOUR_SELECT_PICTURE_REQUEST_CODE) {
            final boolean isCamera;
            if (data == null) {
                isCamera = true;
            } else {
                final String action = data.getAction();
                if (action == null) {
                    isCamera = false;
                } else {
                    isCamera = action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                }
            }

            Uri selectedImageUri;
            if (isCamera) {
                selectedImageUri = outputFileUri;
            } else {
                selectedImageUri = data == null ? null : data.getData();
            }
        }
    }
}

12
খুব ভালো! মাত্র একটি দ্রুত উন্নতি: প্রথমটিতে রয়েছে ক্যামেরা = মিডিয়াস্টোর A তাদের সকলকে শাসন করার জন্য একটি লাইন;)
গ্লাতজিয়াল

7
আমার ক্ষেত্রে final String fname = Utils.getUniqueImageFilename();কাজ হচ্ছে না ... এটিতে বলা হয়েছে Utils cannot be resolved:(
শাজিল আফজাল

30
@ শাজিল, Utils.getUniqueImageFilename()একটি অনন্য ফাইল নাম তৈরি করার জন্য আমার নিজস্ব পদ্ধতি। এটি করার অনেকগুলি উপায় রয়েছে। সবচেয়ে সহজ একটির মতো কিছু ব্যবহার করা "img_"+ System.currentTimeMillis() + ".jpg"। আরেকটি হ'ল File.createTempFile()
ডেভিড ম্যানপারল

10
এটি আমার পক্ষে দুর্দান্ত কাজ করেছে তবে ক্যামেরাটি ব্যবহার করার সময় আমার একটি সমস্যা হয়েছিল কারণ উত্সটি অ্যাক্টিভিটিস রেজাল্টকে কল করছে না এবং ক্যামেরা নিজেই খারিজ হচ্ছে না। ম্যানিফেস্টে মূল কারণটি ছিল একটি অনুপস্থিত অনুমতি: <ব্যবহার-অনুমতি অ্যান্ড্রয়েড: নাম = "android.permission.WRITE_EXTERNAL_STORAGE" />
বিটসভলভ

11
রোহান যেমন বলেছিলেন, এটি 5.1.1 এ পরিবর্তন করা হয়েছে। আপনাকে করতে হবে if (data == null || data.getData() == null)
রায়ান

22

আমি দেখেছি এই । ব্যবহার:

galleryIntent.setType("image/*");
galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

উদ্দেশ্যগুলির মধ্যে একটিতে ব্যবহারকারী অ্যান্ড্রয়েড 4-তে 'নথিগুলি' নির্বাচন করার বিকল্প দেখায় যা আমি খুব বিভ্রান্তিকর বলে মনে করি found পরিবর্তে এটি ব্যবহার করে 'গ্যালারী' বিকল্পটি দেখায়:

Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

এটি ঠিকঠাক কাজ করে .. তবে যখন আমরা ক্যামেরা চিত্রটি ব্রাউজ করি তখন ল্যান্ডস্কেপ মোডে প্রতিকৃতি চিত্র শো হয় ..

@ ব্যবহারকারী 5060065 এবং অন্যদের নির্বাচিত ছবির ওরিয়েন্টেশন নিয়ে সমস্যা রয়েছে, সঠিক অভিযোজন পেতে stackoverflow.com/a/6931373/1975002 দেখুন , এবং তারপরে প্রয়োজনে এটি ঘোরান।
মাইকেল পোলা

12

আমারও এই সমস্যাটি ছিল এবং আমি যা করেছি তা হ'ল একটি সতর্কতা ডায়ালগ তৈরি করা এবং ডায়ালগআইনটারফেস শ্রোতার সাথে সেটটাইটস () পদ্ধতিটি ব্যবহার করা:

AlertDialog.Builder getImageFrom = new AlertDialog.Builder(Fotos.this);
getImageFrom.setTitle("Select:");
final CharSequence[] opsChars = {getResources().getString(R.string.takepic), getResources().getString(R.string.opengallery)};
getImageFrom.setItems(opsChars, new android.content.DialogInterface.OnClickListener(){

    @Override
    public void onClick(DialogInterface dialog, int which) {
        if(which == 0){
            Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
        }else
            if(which == 1){
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent,
                    getResources().getString(R.string.pickgallery)), SELECT_PICTURE);
            }
        dialog.dismiss();
    }
});

11

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

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

স্ক্রীনশট:

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

সম্পাদনা করুন : গ্যালারী এবং ক্যামেরা অ্যাপ্লিকেশনগুলির জন্য একত্রীকরণের জন্য ইন্টেন্টটি মিশ্রিত করার জন্য এখানে কোডের একটি খণ্ড রয়েছে। আপনি পূর্ণ কোড দেখতে পারেন ImagePicker util (এছাড়াও একটি গিটহাব 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;
}

1
এটি সত্যিই ভাল কাজ করে। ধন্যবাদ। আমার কাছে কেবল সমস্যাটিই হ'ল পোর্ট্রেটে ক্যামেরা সহ তোলা ছবিগুলি ল্যান্ডস্কেপ হিসাবে প্রদর্শিত হচ্ছে appear প্রয়োজনীয় চিত্রগুলি ঘোরানোর জন্য আমার কী করা দরকার?
365 স্লিপডিডসস

@ ৩5৫ স্লিপিডিডসন্স আপনি পরীক্ষা করতে পারেন এটি পদ্ধতিতে প্রবেশ করছে কিনা getRotationFromCamera( ImagePicker.java) এবং এটি কী মূল্য ফিরে পাচ্ছে ? আপনি কোন ফোনে পরীক্ষা করছেন?
মারিও ভেলাস্কো

আমি একটি সনি এক্সপেরিয়া সি এবং অ্যান্ড্রয়েড স্টুডিও এমুলেটর ব্যবহার করছি। আপনার সম্পর্কে জিজ্ঞাসিত জিনিসগুলি যাচাই করার জন্য আমি কিছু বিরতি পয়েন্ট রেখেছি এবং এটি বুলিয়ান ইস ক্যামেরাকে getRotation পদ্ধতিতে মিথ্যা বলে মনে হচ্ছে যা getRotationFromCamera ডাকা থেকে থামছে।
365SplendidSuns

আপনি কোন অ্যান্ড্রয়েড সংস্করণ চেষ্টা করছেন? আমি গত সপ্তাহে 58 লাইনে একটি সংশোধন করেছি, এটির সমাধান হয়েছে কিনা তা পরীক্ষা করে দেখুন:boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null);
মারিও ভেলাস্কো

ঠিক আছে, এমুলেটরটি 6.0 সংস্করণ এবং মনে হচ্ছে 58 লাইনটি এটিতে ভাল কাজ করছে। এমুলেটরটিতে isCamera সত্য এবং getRotationFromCamera কে সূক্ষ্ম বলা হচ্ছে তবে int orientation 0 এর অর্থ getRotationFromCamera 0 ফিরছে ... সনি ডিভাইসটি অ্যান্ড্রয়েড 4.2 ব্যবহার করছে এবং এর কোনওটিতেই চিত্রের রিটার্নড ইন্টেন্ট বা চিত্রের রিটার্নড ইন্টেন্ট.জেডডেটা (58) লাইনটি নਾਲ মানে হ'ল ক্যামেরা মিথ্যা এবং আমি getRotationFromCamera হিসাবে কল করার মতো পাচ্ছি না।
365 স্লিপডিডসস

8

এই কোডটি আপনাকে সহায়তা করবে, এতে ক্যামেরার জন্য একটি দুটি এবং গ্যালারির জন্য অন্য দুটি বোতাম রয়েছে এবং চিত্রটি ভিউতে প্রদর্শিত হবে

https://github.com/siddhpuraamitr/Choose-Image-From-Gallery-Or-Camera


5
যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত উত্তরগুলি যদি লিঙ্কযুক্ত পৃষ্ঠা পরিবর্তন হয় তবে অবৈধ হতে পারে
MrEngineer13

6

Selection.৪ এর উপরে ত্রুটি পেয়ে যাচ্ছেন তাদের পক্ষে চিত্র নির্বাচন করার চেষ্টা করার সময় নীচের কোডটি ব্যবহার করতে পারেন।

ইন্টেন্ট বিকল্পগুলির একটি তালিকা সহ একটি ডায়ালগ তৈরি করার পরিবর্তে, বিভিন্ন 'ক্যামেরা', 'গ্যালারী' এবং এমনকি তৃতীয় পক্ষের ফাইল সিস্টেম ব্রাউজার অ্যাপ্লিকেশনগুলির গ্রাফিকাল আইকন এবং সংক্ষিপ্ত নামগুলিতে অ্যাক্সেস পেতে ইনটেন্ট সিআরএইচুসার ব্যবহার করা আরও ভাল is যেমন 'অ্যাস্ট্রো' ইত্যাদি

এটি স্ট্যান্ডার্ড চয়নকারী-অভিপ্রায়টি কীভাবে ব্যবহার করতে পারে এবং এতে অতিরিক্ত ইন্টেন্ট যুক্ত করতে পারে তা বর্ণনা করে।

private void openImageIntent(){

    // Determine Uri of camera image to save.
    final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "amfb" + File.separator);
    root.mkdir();
    final String fname = "img_" + System.currentTimeMillis() + ".jpg";
    final File sdImageMainDirectory = new File(root, fname);
    outputFileUri = Uri.fromFile(sdImageMainDirectory);

    // Camera.
    final List<Intent> cameraIntents = new ArrayList<Intent>();
    final Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    final PackageManager packageManager = getPackageManager();
    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
    for (ResolveInfo res : listCam){
        final String packageName = res.activityInfo.packageName;
        final Intent intent = new Intent(captureIntent);
        intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
        intent.setPackage(packageName);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        cameraIntents.add(intent);
    }

    //FileSystem
    final Intent galleryIntent = new Intent();
    galleryIntent.setType("image/");
    galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

    // Chooser of filesystem options.
    final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");
    // Add the camera options.
    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{}));
    startActivityForResult(chooserIntent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);

}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    //super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
            final boolean isCamera;
            if (data == null) {
                isCamera = true;
            } else {
                final String action = data.getAction();
                if (action == null) {
                    isCamera = false;
                } else {
                    isCamera = action.equals(MediaStore.ACTION_IMAGE_CAPTURE);
                }
            }

            Uri selectedImageUri;
            if (isCamera) {
                selectedImageUri = outputFileUri;
                //Bitmap 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(selectedImageUri.getPath(), options);
                preview.setImageBitmap(bitmap);
            } else {
                selectedImageUri = data == null ? null : data.getData();
                Log.d("ImageURI", selectedImageUri.getLastPathSegment());
                // /Bitmap factory
                BitmapFactory.Options options = new BitmapFactory.Options();
                // downsizing image as it throws OutOfMemory Exception for larger
                // images
                options.inSampleSize = 8;
                try {//Using Input Stream to get uri did the trick
                    InputStream input = getContentResolver().openInputStream(selectedImageUri);
                    final Bitmap bitmap = BitmapFactory.decodeStream(input);
                    preview.setImageBitmap(bitmap);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
    } else if (resultCode == RESULT_CANCELED){
        // user cancelled Image capture
        Toast.makeText(getApplicationContext(),
                "User cancelled image capture", Toast.LENGTH_SHORT)
                .show();
    } else {
        // failed to capture image
        Toast.makeText(getApplicationContext(),
                "Sorry! Failed to capture image", Toast.LENGTH_SHORT)
                .show();
    }
}

ওহে. আমি আপনার সমাধান চেষ্টা করেছি, কিন্তু গ্যালারি থেকে একটি ছবি অবচয় কাজ করছে না: এখানে কটাক্ষপাত: stackoverflow.com/questions/36884651/...

আমার মার্শমেলো ডিভাইসে ক্যামেরাটি ব্যবহার করার সময় এই সমস্যাটি বিভ্রান্ত হয়। আমার জন্য ডেটা নাল নয়, তবে ক্রিয়া হ'ল ক্যামেরাটি মিথ্যা হিসাবে সেট করা হয়েছে।
জেস্টেফেন

6

এটি টিনার নাল আউটপুটফিলিউরি ইস্যুটির যত্ন নেওয়া উচিত:

private static final String STORED_INSTANCE_KEY_FILE_URI = "output_file_uri";

@Override
public void onSaveInstanceState( Bundle outState ) {
    super.onSaveInstanceState( outState );

    if ( outputFileUri != null ) {
        outState.putString( STORED_INSTANCE_KEY_FILE_URI, outputFileUri.toString() );
    }
}

@Override
public void onViewStateRestored( Bundle savedInstanceState ) {
    super.onViewStateRestored( savedInstanceState );

    if ( savedInstanceState != null ) {
      final String outputFileUriStr = savedInstanceState.getString( STORED_INSTANCE_KEY_FILE_URI );
      if ( outputFileUriStr != null && !outputFileUriStr.isEmpty() ) {
          outputFileUri = Uri.parse( outputFileUriStr );
      }
    }
}

দ্রষ্টব্য: আমি এই কোডটি android.support.v4.app.-এর অভ্যন্তরে ব্যবহার করছি over আপনার ওভাররাইড হওয়া পদ্ধতিগুলি আপনি কী ফ্রেগমেন্ট / ক্রিয়াকলাপ সংস্করণ ব্যবহার করছেন তার উপর নির্ভর করে পরিবর্তিত হতে পারে।


5

আপনি বিকল্প সংলাপ তৈরি করতে পারেন

খোলা ক্যামেরা:

Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                                MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
                        if (cameraIntent.resolveActivity(getActivity().getPackageManager()) != null) {
                            startActivityForResult(cameraIntent, CAMERA_IMAGE);
                        }

গ্যালারী খুলুন:

if (Build.VERSION.SDK_INT <= 19) {
            Intent i = new Intent();
            i.setType("image/*");
            i.setAction(Intent.ACTION_GET_CONTENT);
            i.addCategory(Intent.CATEGORY_OPENABLE);
            startActivityForResult(i, GALLARY_IMAGE);
        } else if (Build.VERSION.SDK_INT > 19) {
            Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(intent, GALLARY_IMAGE);
        }

নির্বাচনের ফলাফল পেতে

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == GALLARY_IMAGE) {
                Uri selectedImageUri = data.getData();
                String selectedImagePath = getRealPathFromURI(selectedImageUri);
            } else if (requestCode == CAMERA_IMAGE) {
                Bundle extras = data.getExtras();
                Bitmap bmp = (Bitmap) extras.get("data");
                SaveImage(bmp);
            }
        }
    }

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

বন্দী চিত্রটি সংরক্ষণের পদ্ধতি

 private void SaveImage(final Bitmap finalBitmap) {
        Thread t = new Thread(new Runnable() {
            @Override
            public void run() {
                String root = Environment.getExternalStorageDirectory().toString();

                File myDir = new File(root + "/Captured Images/");
                if (!myDir.exists())
                    myDir.mkdirs();

                String fname = "/image-" + System.currentTimeMillis() + ".jpg";
                File file = new File(myDir, fname);
                try {
                    FileOutputStream out = new FileOutputStream(file);
                    finalBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
                    out.flush();
                    out.close();
                    localImagePath = myDir + fname;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }


        });
        t.start();

    }

2

খুব বড় ইমেজ ইস্যু সমাধান করেছেন এবং স্মৃতি থেকে দূরে থাকুন avoid

    private static final int SELECT_PICTURE = 0;
    private static final int REQUEST_CAMERA = 1;
    private ImageView mImageView;

    private void selectImage() {
        final CharSequence[] items = {"Take Photo", "Choose from Library",
                "Cancel"};
        AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        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);
                    File f = new File(android.os.Environment
                            .getExternalStorageDirectory(), "temp.jpg");
                    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
                    startActivityForResult(intent, REQUEST_CAMERA);
                } 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 File"),
                            SELECT_PICTURE);
                } else if (items[item].equals("Cancel")) {
                    dialog.dismiss();
                }
            }
        });
        builder.show();
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == REQUEST_CAMERA) {
                File f = new File(Environment.getExternalStorageDirectory()
                        .toString());
                for (File temp : f.listFiles()) {
                    if (temp.getName().equals("temp.jpg")) {
                        f = temp;
                        break;
                    }
                }
                try {
                    Bitmap bm;
                    BitmapFactory.Options btmapOptions = new BitmapFactory.Options();
                    btmapOptions.inSampleSize = 2;
                    bm = BitmapFactory.decodeFile(f.getAbsolutePath(),
                            btmapOptions);

                    // bm = Bitmap.createScaledBitmap(bm, 70, 70, true);
                    mImageView.setImageBitmap(bm);

                    String path = android.os.Environment
                            .getExternalStorageDirectory()
                            + File.separator
                            + "test";
                    f.delete();
                    OutputStream fOut = null;
                    File file = new File(path, String.valueOf(System
                            .currentTimeMillis()) + ".jpg");
                    fOut = new FileOutputStream(file);
                    bm.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
                    fOut.flush();
                    fOut.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } else if (requestCode == SELECT_PICTURE) {
                Uri selectedImageUri = data.getData();
                String tempPath = getPath(selectedImageUri, this.getActivity());
                Bitmap bm;
                btmapOptions.inSampleSize = 2;
                BitmapFactory.Options btmapOptions = new BitmapFactory.Options();
                bm = BitmapFactory.decodeFile(tempPath, btmapOptions);
                mImageView.setImageBitmap(bm);
            }
        }
    }
    public String getPath(Uri uri, Activity activity) {
        String[] projection = {MediaStore.MediaColumns.DATA};
        Cursor cursor = activity
                .managedQuery(uri, projection, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }

1

আমার সমাধান যুক্ত করা হচ্ছে - এটি ক্যামেরা থেকে বা গ্যালি থেকে অভিপ্রায়টির সাথেই হোক না কেন এটি একটি কলব্যাক ফিরিয়ে দেবে:

public class ImagePickerManager extends BaseAdapter {

private List<ResolveInfo> mApplications;
private TreeSet<Integer> mImageCaptureIntents;
private TreeSet<Integer> mImagePickerIntents;
private Context mContext;
private final ImagePickerManagerListener listener;

private static enum intentType {
    choosePhoto,
    takePhoto,
    unknown;

    public int getIntValue() {
        switch (this) {
            case choosePhoto:
                return 0;
            case takePhoto:
                return 1;
            case unknown:
                return 2;
        }
        return 0;
    }
}

public interface ImagePickerManagerListener {
    void onChooseImage(Intent intent);
    void onCaptureImage(Intent intent);
}

public ImagePickerManager(Context context,ImagePickerManagerListener listenr) {
    this.mContext = context;
    this.listener = listenr;

    mImageCaptureIntents = new TreeSet<>();
    mImagePickerIntents = new TreeSet<>();

    //Picking photo intent
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType("image/*");
    mApplications = mContext.getPackageManager().queryIntentActivities(intent, 0);

    int index = 0;
    for (int i = 0; i < mApplications.size(); i++) {
        mImagePickerIntents.add(index);
        index++;
    }

    //Capture photo intent
    intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    List<ResolveInfo> resolveInfoList = mContext.getPackageManager().queryIntentActivities(intent, 0);
    mApplications.addAll(resolveInfoList);
    for (int i = 0; i < mApplications.size(); i++) {
        mImageCaptureIntents.add(index);
        index++;
    }
}

public static void openChooseAndCaptureImageDialog(final Context context, final ImagePickerManagerListener listener) {

    Log.d("openChooseAndCaptureImageDialog", "enter");

    final AlertDialog.Builder builder = new AlertDialog.Builder(context);
    final ImagePickerManager imagePickerManager = new ImagePickerManager(context,listener);
    builder.setTitle(context.getString(R.string.image_picker_dialog_box_title));
    builder.setAdapter(imagePickerManager, new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialoginterface, int i) {
            ResolveInfo resolveInfo = (ResolveInfo) imagePickerManager.getItem(i);
            Intent pickerIntent = imagePickerManager.getIntentForPackage(context,resolveInfo,i);
            switch (imagePickerManager.getIntentType(i)){
                case choosePhoto:
                    listener.onChooseImage(pickerIntent);
                    break;
                case takePhoto:
                    listener.onCaptureImage(pickerIntent);
                    break;
                case unknown:
                    break;
            }
        }
    });

    builder.setCancelable(true);
    builder.setInverseBackgroundForced(true);
    AlertDialog dialog = builder.create();
    dialog.show();
}


private intentType getIntentType(int index) {

    if (mImageCaptureIntents.contains(index)) {
       return intentType.takePhoto;
    } else if(mImagePickerIntents.contains(index)) {
        return intentType.choosePhoto;
    }
    return intentType.unknown;
}

private Intent getIntentForPackage(Context context, ResolveInfo info,int index) {
    Intent intent = context.getPackageManager().getLaunchIntentForPackage(info.activityInfo.packageName);

    ComponentName chosenName = new ComponentName(
            info.activityInfo.packageName,
            info.activityInfo.name);

    intent.setComponent(chosenName);
    intent.setFlags(Intent.FLAG_ACTIVITY_TASK_ON_HOME);
    if (mImageCaptureIntents.contains(index)) {
        intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
    } else if(mImagePickerIntents.contains(index)) {
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_PICK);
    }
    return intent;
}

@Override
public int getCount() {
    return mApplications.size();
}

@Override
public Object getItem(int position) {
    return mApplications.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ResolveInfo item = mApplications.get(position);
    if (convertView == null) {
        TextView applicationTextView = new TextView(mContext);
        LayoutParams param = new LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT);
        applicationTextView.setLayoutParams(param);
        final int horizontalPadding = (int) FVRGeneralUtils.convertDpToPx(mContext, 15);
        final int verticalPadding = (int) FVRGeneralUtils.convertDpToPx(mContext, 5);
        applicationTextView.setPadding(horizontalPadding,verticalPadding, horizontalPadding, verticalPadding);
        applicationTextView.setGravity(android.view.Gravity.CENTER_VERTICAL);
        Resources.Theme th = mContext.getTheme();
        TypedValue tv = new TypedValue();

        if (th.resolveAttribute(android.R.attr.textAppearanceMedium, tv, true)) {
            applicationTextView.setTextAppearance(mContext, tv.resourceId);
        }

        applicationTextView.setMinHeight((int) FVRGeneralUtils.convertDpToPx(mContext, 25));
        applicationTextView.setCompoundDrawablePadding((int) FVRGeneralUtils.convertDpToPx(mContext, 7));
        convertView = applicationTextView;
    }

    TextView textView = (TextView) convertView;
    textView.setText(item.loadLabel(mContext.getPackageManager()));
    textView.setCompoundDrawablesWithIntrinsicBounds(item.loadIcon(mContext.getPackageManager()), null, null, null);
    return textView;
} }

1

আপনি এটি চেষ্টা করতে পারেন:

গ্যালারী খুলতে:

private void browseImage() {

        try {
  Intent galleryIntent = new Intent(Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  startActivityForResult(galleryIntent, GALLERY_IMAGE_PICK); //GALLERY_IMAGE_PICK it is a string
  } catch (Exception e) {}
     }

ক্যামেরা খুলতে:

 private void captureImage() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

    // start the image capture Intent

    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);

}

1
এটি অন্য কোথাও থেকে একটি পেস্ট। উদাহরণস্বরূপ - getOutputMediaFileUri কি করে? ব্যাখ্যা সহ সম্পূর্ণ উদাহরণ ভাগ করুন।
কিলোকাহন

0

সতর্কতা ডায়ালগ এবং অভিপ্রায় ব্যবহার করে এটি সহজ A অ্যাকশন_পিক

    //camOption is a string array contains two items (Camera, Gallery)
    AlertDialog.Builder builder = new AlertDialog.Builder(CarPhotos.this);
    builder.setTitle(R.string.selectSource)
    .setItems(R.array.imgOption, new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which)

     {

        if (which==0) {
        Intent intent = new Intent(this, CameraActivity.class);
        startActivityForResult(intent, REQ_CAMERA_IMAGE);               }

        if (which==1) {
        Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(i, RESULT_LOAD_IMAGE);
            }

     }
            });
             builder.create();
             builder.show();

0

ডেভিড এর উত্তর উপর ভিত্তি করে, আমার onActivityResult()অংশে দুটি পেনি । এটি 5.1.1 এ প্রবর্তিত পরিবর্তনগুলির যত্ন নেয় এবং ব্যবহারকারী গ্রন্থাগার থেকে একক বা একাধিক চিত্র বেছে নিয়েছে কিনা তা সনাক্ত করে।

private enum Outcome {
    camera, singleLibrary, multipleLibrary, unknown
}

/**
 * Returns a List<Uri> containing the image uri(s) chosen by the user
 *
 * @param data      The data intent coming from the onActivityResult()
 * @param cameraUri The uri that had been passed to the intent when the chooser was invoked.
 * @return A List<Uri>, never null.
 */
public List<Uri> getPicturesUriFromIntent(Intent data, Uri cameraUri) {

    Outcome outcome = Outcome.unknown;

    if (data == null || (data.getData() == null && data.getClipData() == null)) {
        outcome = Outcome.camera;
    } else if (data.getData() != null && data.getClipData() == null) {
        outcome = Outcome.singleLibrary;
    } else if (data.getData() == null) {
        outcome = Outcome.multipleLibrary;
    } else {
        final String action = data.getAction();
        if (action != null && action.equals(MediaStore.ACTION_IMAGE_CAPTURE)) {
            outcome = Outcome.camera;
        }
    }

    // list the uri(s) we got back
    List<Uri> uris = new ArrayList<>();
    switch (outcome) {
        case camera:
            uris.add(cameraUri);
            break;

        case singleLibrary:
            uris.add(data.getData());
            break;

        case multipleLibrary:
            final ClipData clipData = data.getClipData();
            for (int i = 0; i < clipData.getItemCount(); i++) {
                ClipData.Item item = clipData.getItemAt(i);
                uris.add(item.getUri());
            }
            break;
    }

    return uris;
}

0

এইভাবে চেষ্টা করুন

final CharSequence[] items = { "Take Photo", "Choose from Library",
            "Cancel" };

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    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);
                File f = new File(android.os.Environment
                        .getExternalStorageDirectory(), "temp.jpg");
                intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
                startActivityForResult(intent, REQUEST_CAMERA);
            } 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 File"),
                        SELECT_FILE);
            } else if (items[item].equals("Cancel")) {
                dialog.dismiss();
            }
        }
    });
    builder.show();

তারপরে onactivityresult পদ্ধতি তৈরি করুন এবং এর মতো কিছু করুন

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if (requestCode == REQUEST_CAMERA) {
            File f = new File(Environment.getExternalStorageDirectory()
                    .toString());
            for (File temp : f.listFiles()) {
                if (temp.getName().equals("temp.jpg")) {
                    f = temp;
                    break;
                }
            }
            try {
                Bitmap bm;
                BitmapFactory.Options btmapOptions = new BitmapFactory.Options();

                bm = BitmapFactory.decodeFile(f.getAbsolutePath(),
                        btmapOptions);

                // bm = Bitmap.createScaledBitmap(bm, 70, 70, true);
                ivImage.setImageBitmap(bm);

                String path = android.os.Environment
                        .getExternalStorageDirectory()
                        + File.separator
                        + "Phoenix" + File.separator + "default";
                f.delete();
                OutputStream fOut = null;
                File file = new File(path, String.valueOf(System
                        .currentTimeMillis()) + ".jpg");
                try {
                    fOut = new FileOutputStream(file);
                    bm.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
                    fOut.flush();
                    fOut.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else if (requestCode == SELECT_FILE) {
            Uri selectedImageUri = data.getData();

            String tempPath = getPath(selectedImageUri, MainActivity.this);
            Bitmap bm;
            BitmapFactory.Options btmapOptions = new BitmapFactory.Options();
            bm = BitmapFactory.decodeFile(tempPath, btmapOptions);
            ivImage.setImageBitmap(bm);
        }
    }
}

এটি দেখুন http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample


0

অ্যান্ড্রয়েডে চিত্রের জন্য ক্যামেরা বা গ্যালারী নির্বাচন করা

আমি ক্যামেরা বা গ্যালারী চিত্র নির্বাচনের উপর কঠোর পরিশ্রম করেছি এবং এই কাজের জন্য কিছু ব্যবহারের শ্রেণি তৈরি করেছি। এই শ্রেণীর ব্যবহারের সাথে 'চিত্রের ক্যামেরা বা গ্যালারী নির্বাচন করা খুব সহজ' আপনার বিকাশের মাত্র 5-10 মিনিট লেগেছিল।

পদক্ষেপ -১: আপনার কোডে এই ক্লাসগুলি যুক্ত করুন।

ইমেজপিকার ইউটিস: - http://www.codesend.com/view/f8f7c637716bf1c693d1490635ed49b3/

বিটম্যাপটিলগুলি: - http://www.codesend.com/view/81c1c2a3f39f1f7e627f01f67be282cf/

কনভার্ট ইউরিটোফিলিপথ: - http://www.codesend.com/view/f4668a29860235dd1b66eb419c5a58b5/

মিডিয়া ইউটিস: - https://codeshare.io/5vKEMl

ম্যানিফেস্টে আমাদের এই অনুমতিগুলি যুক্ত করতে হবে:

  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  <uses-feature android:name="android.hardware.camera" />
  <uses-feature android:name="android.hardware.camera.autofocus" />

এই শ্রেণীর ফাংশন (চেকঅ্যান্ডআরউইকুয়েস্টপিয়ারেশন) অ্যান্ড্রয়েড-মার্শমেলো এবং অ্যান্ড্রয়েড - নওগাতে অনুমতি পরীক্ষা করে

ধাপ ২. ক্যামেরা উদ্দেশ্য চালু করার জন্য ক্যামেরা ক্লাস কল করা:

 //Create a global veriable .  
     private Uri mCameraUri;
     private static final int CAMERA_REQUEST_CODE = 100;

// Call this function when you wants to select or capture an Image.
       mCameraUri = ImagePickerUtils.createTakePictureIntent(this, CAMERA_REQUEST_CODE);

পদক্ষেপ -3: অভিপ্রায় থেকে ডেটা পাওয়ার জন্য আপনার ক্রিয়াকলাপে কার্যকলাপ ক্রিয়াকলাপ যুক্ত করুন

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {
            Uri fileUri = ImagePickerUtils.getFileUriOfImage(this, data, mCameraUri);
            try {
                Bitmap bitmap = null;
                if (CAMERA_REQUEST_CODE == requestCode) {
                    bitmap = new BitmapUtils().getDownsampledBitmap(this, fileUri, imageView.getWidth(), imageView.getHeight());
                }
                if (bitmap != null)
                imageView.setImageBitmap(bitmap);

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

আমি আশা করি এটি আপনাকে সহায়তা করে, যদি এই শ্রেণীর উন্নতিতে কেউ পরামর্শ দেয় তবে দয়া করে আপনার পর্যালোচনা মন্তব্যগুলিতে যুক্ত করুন।


এটি একটি সমস্যা আছে। বিটম্যাপটিলস এবং ইমেজপিকার ইউটিলে ব্যবহৃত মিডিয়া ইউটিসগুলি ক্লাসটি কোথায়?
রজার আরভি

@ রোজারআরভি, আমাকে জানানোর জন্য ধন্যবাদ, আমি সবেমাত্র নতুন ক্লাস ফাইল সহ উত্তরটি আপডেট করেছি।
এড্রয়েড টেক

আপনাকে ধন্যবাদ আমি এখন এটি চেক করব। আমি এটি নিজের জন্য এটি সমাধান করার চেষ্টা করেছি কিন্তু এটি মোটেও কাজ করে না
রজার আরভি

0

ডেভিড ম্যানপারল অনুসারে উত্তর
https://stackoverflow.com/a/12347567/7226732

আমাদের কেবলমাত্রঅ্যাক্টিভিটি রেজাল্ট () এর মতো পরিবর্তন করতে হবে

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        if (requestCode == YOUR_SELECT_PICTURE_REQUEST_CODE) {
            final boolean isCamera;
            if (data.getExtras() == null) {
                isCamera = true;
            } else {
                final String action = data.getAction();
                if (action == null) {
                    isCamera = false;
                } else {
                    isCamera = action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                }
            }
            Uri selectedImageUri;
            if (isCamera) {
                selectedImageUri = fileUri;
                try {
                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri);
                    Toast.makeText(CreateWaterType.this, "Image Saved!", Toast.LENGTH_SHORT).show();
                    image_view.setImageBitmap(bitmap);

                } catch (IOException e) {
                    e.printStackTrace();
                    Toast.makeText(CreateWaterType.this, "Failed!", Toast.LENGTH_SHORT).show();
                }

            } else {
                selectedImageUri = data == null ? null : data.getData();
                try {
                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImageUri);

                    Toast.makeText(CreateWaterType.this, "Image Saved!", Toast.LENGTH_SHORT).show();
                    image_view.setImageBitmap(bitmap);

                } catch (IOException e) {
                    e.printStackTrace();
                    Toast.makeText(CreateWaterType.this, "Failed!", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }
}

এবং ক্যাপচার সেট করুন বা চিত্র দর্শনে ছবি বাছুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.