Receiving an image from an SD card and camera

Currently, I have a standard image selection dialog (from an SD card) shown when disabling this intention:

Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE); 

This list lists all applications / actions that can return an image (for example, Gallery).

In the same standard list, I also want to include an option that will launch the camera and return the image taken with it. The problem is that I can’t understand how to do this in a non-standard way (creating my own dialogue with a user layout, application images + name, etc.).

Camera activity can be started as follows:

 Intent camera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); URI pictureUri = Uri.fromFile(new File("dummyPath")); camera.putExtra(MediaStore.EXTRA_OUTPUT, pictureUri); 

Is there an intention that will allow me to choose an image from an SD card or one with a camera?

Update: I found a solution, double-checking it and posting it here.

+4
source share
2 answers

you may have a warning dialog to display options. The source code is below:

 AlertDialog.Builder getImageFrom = new AlertDialog.Builder(MainActivity.this); getImageFrom.setTitle("Select Image"); final CharSequence[] opsChars = {"Take Picture", "Open Gallery"}; getImageFrom.setItems(opsChars, new android.content.DialogInterface.OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { if(which == 0){ File file = new File( _path ); outputFileUri = Uri.fromFile( file ); Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); startActivityForResult(cameraIntent, 7); }else if(which == 1){ Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Open Gallery"), 6); } dialog.dismiss(); } }); public void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { if (requestCode == 6) { Uri selectedImageUri = data.getData(); pickerImageView.setPadding(0, 0, 0, 0); pickerImageView.setScaleType(ScaleType.FIT_XY); System.gc(); String filepath = getPath(selectedImageUri); File imagefile = new File(filepath); try { FileInputStream fis = new FileInputStream(imagefile); BitmapFactory.Options options=new BitmapFactory.Options(); options.inPurgeable=true; options.inSampleSize =4; bi= BitmapFactory.decodeStream(fis,null,options); fis.close(); Bitmap bitmapToRecycle = ((BitmapDrawable)pickerImageView.getDrawable()).getBitmap(); bitmapToRecycle.recycle(); pickerImageView.setImageBitmap(bi); pickerImageView.setPadding(0, 0, 0, 0); pickerImageView.setScaleType(ScaleType.FIT_XY); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } pickImageTextView.setText(""); } else if(requestCode == 7){ Log.i("return", "#####"); BitmapFactory.Options options=new BitmapFactory.Options(); options.inPurgeable=true; options.inSampleSize =4; //Bitmap photo = BitmapFactory.decodeFile( _path, options ); Bitmap photo = (Bitmap) data.getExtras().get("data"); pickerImageView.setImageBitmap(photo); pickerImageView.setPadding(0, 0, 0, 0); pickerImageView.setScaleType(ScaleType.FIT_XY); } } } 
+4
source

You can programmatically add your image to the gallery as follows:

 Intent media = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 

// mCurrentPhotoPath is the path to the image.

 File f = new File(mCurrentPhotoPath); Uri contentUri = Uri.fromFile(f); media.setData(contentUri); this.sendBroadcast(media); 
-1
source

Source: https://habr.com/ru/post/1445461/


All Articles