android take multiple image with camera

arvin

I've already made a code for capturing an image using device built-in camera and archiving it in the database server. For each time I captures an image and views it, it will make another ImageView layout dynamically (ex: the image is ic_launcher).

Whenever the ic_launcher image is clicked, it will go to the MainActivity.java page, with the use of intent, to take another image.

My question is, how can I view all of the captured images / archived images in the uploadActivity.java?

Note: the image is viewed in the uploadactivity.java

mainactivity.java

 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);
}
 @Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    // save file url in bundle as it will be null on screen orientation
    // changes
    outState.putParcelable("file_uri", fileUri);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    // get the file url
    fileUri = savedInstanceState.getParcelable("file_uri");
}



/**
 * Receiving activity result method will be called after closing the camera
 * */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // if the result is capturing Image
    if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {

            launchUploadActivity(true);


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

    }
}

private void launchUploadActivity(boolean isImage){
    Intent i = new Intent(MainActivity.this, UploadActivity.class);
    i.putExtra("filePath", fileUri.getPath());
    i.putExtra("isImage", isImage);
    startActivity(i);
}

/**
 * ------------ Helper Methods ---------------------- 
 * */


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


private static File getOutputMediaFile(int type) {

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

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

    // Create a media file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
            Locale.getDefault()).format(new Date());
    File mediaFile;
        mediaFile = new File(mediaStorageDir.getPath() + File.separator
                + "IMG_" + timeStamp + ".jpg");


    return mediaFile;
}

UploadActivity.java

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_upload);

    txtPercentage = (TextView) findViewById(R.id.txtPercentage);
    btnUpload = (Button) findViewById(R.id.btnUpload);      
    Button  btnTaking = (Button)findViewById(R.id.btntake);
    layout2 = (LinearLayout) findViewById(R.id.ly2);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    vidPreview = (VideoView) findViewById(R.id.videoPreview);


    // Changing action bar background color
    getActionBar().setBackgroundDrawable(
            new ColorDrawable(Color.parseColor(getResources().getString(
                    R.color.action_bar))));

    // Receiving the data from previous activity
    Intent intent = getIntent();

    // image or video path that is captured in previous activity
    filePath = intent.getStringExtra("filePath");


    ArrayList<String> yourFilePaths = new ArrayList<>();// Create ArrayList

    // first you have to check if you've saved filepaths
    SharedPreferences prefs = getSharedPreferences("SavedFilePaths",
            Context.MODE_PRIVATE);
    String myJSONArrayString = prefs.getString("SavedFilePathsJSONArray",
            "");
    if (!myJSONArrayString.isEmpty()) {
        JSONArray jsonArray = null;
        try {
            jsonArray = new JSONArray(myJSONArrayString);
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        for (int i = 0; i < jsonArray.length(); i++) {
            try {
                yourFilePaths.add(jsonArray.get(i).toString());
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }


    // add the last photo you've taken
    yourFilePaths.add(filePath);
    // Save the new ArrayList in SharedPreferences:
    JSONArray mJSONArray = new JSONArray(yourFilePaths);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString("SavedFilePathsJSONArray", mJSONArray.toString());

    // Show images by filePaths
    File imgFile;
    for (int i = 0; i < yourFilePaths.size(); ++i) {
        imgFile = new File(yourFilePaths.get(i));
        if (imgFile.exists()) {
              final BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize = 8;

               Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath(),options);

            ImageView myImage = new ImageView(this);

            myImage.setImageBitmap(myBitmap);// In this step you've to
                                                // create dynamic imageViews
                                                // to see more than one
                                                // picture
            layout2.addView(myImage);// Then add your dynamic imageviews to
                                    // your layout

        }
    }

    btnTaking.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        Intent intent = new Intent(UploadActivity.this, MainActivity.class);
        startActivity(intent);
        }
    });

    btnUpload.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // uploading the file to server
            new UploadFileToServer().execute();
        }
    });

}

Activity_Upload

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/view_background"
android:orientation="vertical"
android:padding="10dp" >

<!-- To display picture taken -->


<LinearLayout
    android:id="@+id/ly2"
    android:layout_width="wrap_content"
    android:layout_height="100dp"
    android:orientation="vertical" >

</LinearLayout>

<TextView
    android:id="@+id/txtPercentage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginBottom="15dp"
    android:layout_marginTop="15dp"
    android:textColor="@color/txt_font"
    android:textSize="30dp" />

<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="fill_parent"
    android:layout_height="20dp"
    android:layout_marginBottom="35dp"
    android:visibility="gone" />

<Button
    android:id="@+id/btnUpload"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginBottom="20dp"
    android:background="@color/btn_bg"
    android:paddingLeft="20dp"
    android:paddingRight="20dp"
    android:text="@string/btnUploadToServer"
    android:textColor="@color/white"
    android:visibility="gone"
     />
<TextView 
    android:id="@+id/idt"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    />

<Button
    android:id="@+id/btntake"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_marginBottom="20dp"
    android:background="@color/btn_bg"
    android:paddingLeft="20dp"
    android:paddingRight="20dp"
    android:text="Take Another Picture"
    android:textColor="@color/white" />

Output

enter image description here

Note: i got this code from androidhive

Fabio Venturi Pastor

Ok now i think i understand your problem. To understand my code check this:

what is sharedPreferences?

Show Image View from file path in android?

Create ImageViews dynamically inside a loop

Last Edit: add commit() solve the problem

What we are going to try is save the file paths in ArrayList and save this array in a SharedPreferences:

layout_example.xml <-- create a Layout on your xml to add imageViews inside

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:padding="5dp">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:id="@+id/myLinearLayout"></LinearLayout>
</RelativeLayout>

UploadActivity.java

     Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_upload);//add the LinearLayout of the layout_example.xml

    txtPercentage = (TextView) findViewById(R.id.txtPercentage);
    btnUpload = (Button) findViewById(R.id.btnUpload);
    layout = (LinearLayout) findViewById(R.id.ly1);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    imgPreview = (ImageView) findViewById(R.id.imgPreview);

    addImageView(layout);

    // Changing action bar background color
    getActionBar().setBackgroundDrawable(
            new ColorDrawable(Color.parseColor(getResources().getString(
                    R.color.action_bar))));

    // Receiving the data from previous activity
    Intent i = getIntent();

    // image or video path that is captured in previous activity
    filePath = i.getStringExtra("filePath");

   LinearLayour ly_myLayout = (LinearLayout)findViewById(R.id.myLinearLayout);
   ArrayList<String> yourFilePaths = new ArrayList<>();//Create ArrayList

    //first you have to check if you've saved filepaths
    SharedPreferences prefs = getSharedPreferences("SavedFilePaths",   Context.MODE_PRIVATE);
    String myJSONArrayString = prefs.getString("SavedFilePathsJSONArray", "");
    if(!myJSONArrayString.isEmpty()){
    JSONArray jsonArray = new JSONArray(myJSONArrayString);
      for (int i=0;i<jsonArray.length();i++){ 
        yourFilePaths.add(jsonArray.get(i).toString());
       } 
    }
    //add the last photo you've taken
     yourFilePaths.add(filePath);

    //Save the new ArrayList in SharedPreferences:
     JSONArray mJSONArray = new JSONArray(yourFilePaths);
     SharedPreferences.Editor editor = prefs.edit();
     editor.putString("SavedFilePathsJSONArray",mJSONArray.toString()).commit(); // add commit

    //Show images by filePaths             
    File imgFile;
      for (int i = 0; i < yourFilePaths.size(); ++i) {
        imgFile = new  File(yourFilePaths.get(i));
        if(imgFile.exists()){

        Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());

        ImageView myImage = new ImageView(this);

        myImage.setImageBitmap(myBitmap);// In this step you've to create dynamic imageViews to see more than one picture

        ly_myLayout.addView(myImage);//Then add your dynamic imageviews to your layout

        }
      }

    btnUpload.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // uploading the file to server
            new UploadFileToServer().execute();
        }
    });

}

/**
 * Displaying captured image/video on the screen
 * */
private void previewMedia(boolean isImage) {
    // Checking whether captured media is image or video
    if (isImage) {
        imgPreview.setVisibility(View.VISIBLE);
        vidPreview.setVisibility(View.GONE);
        // bimatp factory
        BitmapFactory.Options options = new BitmapFactory.Options();

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

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

        imgPreview.setImageBitmap(bitmap);

    } 
}

    private void addImageView(LinearLayout layout) {
    i = 0;
    ImageView imageView = new ImageView(this);
    imageView.setImageResource(R.drawable.ic_launcher);
    imageView.setId(i);
    layout.addView(imageView);
    imageView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(UploadActivity.this,
                    MainActivity.class);
            startActivity(intent);
        }
    });
}

enter image description here Solve your problem?

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Android camera to take multiple photos

From Dev

Android L - Take flash image with autofocus using Camera2 api

From Dev

Android crop camera image

From Dev

Android - take picture - pass uri to camera app

From Dev

Android using front facing camera to take a picture

From Dev

front camera take very dark capture in android

From Dev

Android - take picture - pass uri to camera app

From Dev

Take picture with front camera in android service

From Dev

Take images without closing camera in Android

From Dev

Android Camera2 : can't take picture with front camera

From Dev

Android Camera image distorted - SurfaceHolder -

From Dev

how to set the camera in raspberry pi to take black and white image?

From Dev

How to use camera intent to take photos multiple times

From Dev

Nativescript camera take multiple pictures before returning to the app

From Dev

Can I take Black and White pictures using android camera intent?

From Dev

Android Camera Preview - take only a part of the screen data

From Dev

Android: take camera picture intent remove confirmation dialog

From Dev

How to take pic with camera and save it to database and show in listView in Android?

From Dev

When are camera files saved in Android when I take pictures this way?

From Dev

Take picture only with android camera intent in Kotlin, not video

From Dev

How to take pic with camera and save it to database and show in listView in Android?

From Dev

Android Tablet Take Picture Camera Intent Activity Restarts

From Dev

Can I take Black and White pictures using android camera intent?

From Dev

ANDROID STUDIO: Take picture with Camera API -> Send this picture to another activity

From Dev

When are camera files saved in Android when I take pictures this way?

From Dev

Android: How to take a camera-shot and view it in Webview/ Imageview afterword?

From Dev

Android : Take a photo from with in my layout without starting a camera intent

From Dev

How to constantly take pictures in Android Camera2?

From Dev

Copying a small image into the camera frame with OpenCV for Android

Related Related

  1. 1

    Android camera to take multiple photos

  2. 2

    Android L - Take flash image with autofocus using Camera2 api

  3. 3

    Android crop camera image

  4. 4

    Android - take picture - pass uri to camera app

  5. 5

    Android using front facing camera to take a picture

  6. 6

    front camera take very dark capture in android

  7. 7

    Android - take picture - pass uri to camera app

  8. 8

    Take picture with front camera in android service

  9. 9

    Take images without closing camera in Android

  10. 10

    Android Camera2 : can't take picture with front camera

  11. 11

    Android Camera image distorted - SurfaceHolder -

  12. 12

    how to set the camera in raspberry pi to take black and white image?

  13. 13

    How to use camera intent to take photos multiple times

  14. 14

    Nativescript camera take multiple pictures before returning to the app

  15. 15

    Can I take Black and White pictures using android camera intent?

  16. 16

    Android Camera Preview - take only a part of the screen data

  17. 17

    Android: take camera picture intent remove confirmation dialog

  18. 18

    How to take pic with camera and save it to database and show in listView in Android?

  19. 19

    When are camera files saved in Android when I take pictures this way?

  20. 20

    Take picture only with android camera intent in Kotlin, not video

  21. 21

    How to take pic with camera and save it to database and show in listView in Android?

  22. 22

    Android Tablet Take Picture Camera Intent Activity Restarts

  23. 23

    Can I take Black and White pictures using android camera intent?

  24. 24

    ANDROID STUDIO: Take picture with Camera API -> Send this picture to another activity

  25. 25

    When are camera files saved in Android when I take pictures this way?

  26. 26

    Android: How to take a camera-shot and view it in Webview/ Imageview afterword?

  27. 27

    Android : Take a photo from with in my layout without starting a camera intent

  28. 28

    How to constantly take pictures in Android Camera2?

  29. 29

    Copying a small image into the camera frame with OpenCV for Android

HotTag

Archive