Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android How can I call Camera or Gallery Intent Together

Tags:

android

If I want to capture image from native camera, I can do:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
        startActivityForResult(intent, IMAGE_CAPTURE);

If I want to get image from gallery, I can do:

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

I am wondering how can put the above two together.
That means GET IMAGE FROM GALLERY OR CAPTURE PHOTO Select an action

Is there any example code to do it? Thanks.

like image 206
jjLin Avatar asked Jul 31 '12 03:07

jjLin


People also ask

How do I use my Android camera and gallery?

Run the application on an Android phone. Selecting "Take photo" will open your camera. Finally, the image clicked will be displayed in the ImageView. Selecting "Choose from Gallery" will open your gallery (note that the image captured earlier has been added to the phone gallery).

How do I open camera with intent?

Intent camera_intent = new Intent(MediaStore. ACTION_IMAGE_CAPTURE); startActivityForResult(camera_intent, pic_id); Now use onActivityResult() method to get the result, here the captured image.

Which intent action do you use to take a picture with a camera app?

The Android Camera application encodes the photo in the return Intent delivered to onActivityResult() as a small Bitmap in the extras, under the key "data" . The following code retrieves this image and displays it in an ImageView . Note: This thumbnail image from "data" might be good for an icon, but not a lot more.


3 Answers

If you want to take picture from Camera or Gallery Intent Together, Then check below link. Same question also posted here.

Capturing image from gallery & camera in android

UPDATED CODE:

check below code, In this code not same as you want into listview, but it gives the option in the dialogBox choose image from Gallary OR Camera.

public class UploadImageActivity extends Activity { ImageView img_logo; protected static final int CAMERA_REQUEST = 0; protected static final int GALLERY_PICTURE = 1; private Intent pictureActionIntent = null; Bitmap bitmap;      String selectedImagePath;  @Override public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main1);      img_logo= (ImageView) findViewById(R.id.imageView1);     img_logo.setOnClickListener(new OnClickListener() {         public void onClick(View v) {             startDialog();         }      }); }  private void startDialog() {     AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(             getActivity());     myAlertDialog.setTitle("Upload Pictures Option");     myAlertDialog.setMessage("How do you want to set your picture?");      myAlertDialog.setPositiveButton("Gallery",             new DialogInterface.OnClickListener() {                 public void onClick(DialogInterface arg0, int arg1) {                     Intent pictureActionIntent = null;                      pictureActionIntent = new Intent(                             Intent.ACTION_PICK,                             android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);                      startActivityForResult(                             pictureActionIntent,                             GALLERY_PICTURE);                  }             });      myAlertDialog.setNegativeButton("Camera",             new DialogInterface.OnClickListener() {                 public void onClick(DialogInterface arg0, int arg1) {                      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,                             CAMERA_REQUEST);                  }             });     myAlertDialog.show(); }  @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {      super.onActivityResult(requestCode, resultCode, data);      bitmap = null;     selectedImagePath = null;      if (resultCode == RESULT_OK && requestCode == CAMERA_REQUEST) {          File f = new File(Environment.getExternalStorageDirectory()                 .toString());         for (File temp : f.listFiles()) {             if (temp.getName().equals("temp.jpg")) {                 f = temp;                 break;             }         }          if (!f.exists()) {              Toast.makeText(getBaseContext(),              "Error while capturing image", Toast.LENGTH_LONG)              .show();              return;          }          try {              bitmap = BitmapFactory.decodeFile(f.getAbsolutePath());              bitmap = Bitmap.createScaledBitmap(bitmap, 400, 400, true);              int rotate = 0;             try {                 ExifInterface exif = new ExifInterface(f.getAbsolutePath());                 int orientation = exif.getAttributeInt(                         ExifInterface.TAG_ORIENTATION,                         ExifInterface.ORIENTATION_NORMAL);                  switch (orientation) {                 case ExifInterface.ORIENTATION_ROTATE_270:                     rotate = 270;                     break;                 case ExifInterface.ORIENTATION_ROTATE_180:                     rotate = 180;                     break;                 case ExifInterface.ORIENTATION_ROTATE_90:                     rotate = 90;                     break;                 }             } catch (Exception e) {                 e.printStackTrace();             }             Matrix matrix = new Matrix();             matrix.postRotate(rotate);             bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(),                     bitmap.getHeight(), matrix, true);                img_logo.setImageBitmap(bitmap);             //storeImageTosdCard(bitmap);         } catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }      } else if (resultCode == RESULT_OK && requestCode == GALLERY_PICTURE) {         if (data != null) {              Uri selectedImage = data.getData();             String[] filePath = { MediaStore.Images.Media.DATA };             Cursor c = getContentResolver().query(selectedImage, filePath,                     null, null, null);             c.moveToFirst();             int columnIndex = c.getColumnIndex(filePath[0]);             selectedImagePath = c.getString(columnIndex);             c.close();              if (selectedImagePath != null) {                 txt_image_path.setText(selectedImagePath);             }              bitmap = BitmapFactory.decodeFile(selectedImagePath); // load             // preview image             bitmap = Bitmap.createScaledBitmap(bitmap, 400, 400, false);                img_logo.setImageBitmap(bitmap);          } else {             Toast.makeText(getApplicationContext(), "Cancelled",                     Toast.LENGTH_SHORT).show();         }     }  }   } 

Also add pemission:

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

store Image to sdcard:

private void storeImageTosdCard(Bitmap processedBitmap) {     try {         // TODO Auto-generated method stub          OutputStream output;         // Find the SD Card path         File filepath = Environment.getExternalStorageDirectory();         // Create a new folder in SD Card         File dir = new File(filepath.getAbsolutePath() + "/appName/");         dir.mkdirs();          String imge_name = "appName" + System.currentTimeMillis()                 + ".jpg";         // Create a name for the saved image         File file = new File(dir, imge_name);         if (file.exists()) {             file.delete();             file.createNewFile();         } else {             file.createNewFile();          }          try {              output = new FileOutputStream(file);              // Compress into png format image from 0% - 100%             processedBitmap                     .compress(Bitmap.CompressFormat.PNG, 100, output);             output.flush();             output.close();              int file_size = Integer                     .parseInt(String.valueOf(file.length() / 1024));             System.out.println("size ===>>> " + file_size);             System.out.println("file.length() ===>>> " + file.length());              selectedImagePath = file.getAbsolutePath();            }          catch (Exception e) {             // TODO Auto-generated catch block             e.printStackTrace();         }     } catch (Exception e) {         // TODO Auto-generated catch block         e.printStackTrace();     }  } 
like image 78
Rahul Patel Avatar answered Oct 23 '22 03:10

Rahul Patel


Let's say that you have two intents. One that would open a camera, one that would open a gallery. I will call these cameraIntent and gallerIntent in the example code. You can use intent chooser to combine these two:

Kotlin:

val chooser = Intent.createChooser(galleryIntent, "Some text here")
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, arrayOf(cameraIntent))
startActivityForResult(chooser, requestCode)

Java:

Intent chooser = Intent.createChooser(galleryIntent, "Some text here");
chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { cameraIntent });
startActivityForResult(chooser, requestCode);

This is, as you asked, how you can put the two together (without having to make your own UI/ dialog).

like image 38
roepit Avatar answered Oct 23 '22 03:10

roepit


If you want to show all the apps installed in the phone that can deal with photos such as Camera, Gallery, Dropbox, etc.

You can do something like:

1.- Ask for all the intents available:

    Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE");
    Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
    gallIntent.setType("image/*"); 

    // look for available intents
    List<ResolveInfo> info=new ArrayList<ResolveInfo>();
    List<Intent> yourIntentsList = new ArrayList<Intent>();
    PackageManager packageManager = context.getPackageManager();
    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);
        info.add(res);
    }
    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);
        info.add(res);
    }

2.- Show a custom dialog with the list of items:

    AlertDialog.Builder dialog = new AlertDialog.Builder(context);
    dialog.setTitle(context.getResources().getString(R.string.select_an_action));
    dialog.setAdapter(buildAdapter(context, activitiesInfo),
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int id) {
                    Intent intent = intents.get(id);
                    context.startActivityForResult(intent,1);
                }
            });

    dialog.setNeutralButton(context.getResources().getString(R.string.cancel),
            new android.content.DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
    dialog.show();

This is a full example: https://gist.github.com/felixgborrego/7943560

like image 38
Felix Avatar answered Oct 23 '22 04:10

Felix