0

At the click of a button, I want to start an Intent to take a picture, and then display it in my layout. I am using the following code:

private void takePicture() {
    Intent intent = new Intent("android.media.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, 0);

}

  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode) {
    case 0:
        if (resultCode == Activity.RESULT_OK) {
            Uri selectedImage = imageUri;
            getContentResolver().notifyChange(selectedImage, null);
            ImageView imageView = (ImageView) findViewById(R.id.ImageView);
            ContentResolver cr = getContentResolver();
            Bitmap bitmap;
            try {
                bitmap = android.provider.MediaStore.Images.Media
                        .getBitmap(cr, selectedImage);

                imageView.setImageBitmap(Bitmap.createScaledBitmap(bitmap, bitmap.getHeight()/2, bitmap.getWidth()/2, false));


                Toast.makeText(this, selectedImage.toString(),
                        Toast.LENGTH_LONG).show();
            } catch (Exception e) {
                Toast.makeText(this, "Failed to load", Toast.LENGTH_SHORT)
                        .show();

            }
        }

The Picture is definitely showing, but when I change the activity and go back to this one, the picture goes away. How do I save it permanently?

Kgrover
  • 2,106
  • 2
  • 36
  • 54

2 Answers2

0

Try this as my code is working properly

                    public class PhotoActivity extends Activity {

                    /** The Constant PICK_IMAGE. */
                    private static final int PICK_IMAGE = 0;

                    /** The Constant PICK_IMAGE_FROM_GALLERY. */
                    private static final int PICK_IMAGE_FROM_GALLERY = 1;

                    /** The btn cancel. */
                    private Button btnPhotoCamera,btnPhotoGallery,btnCancel;

                    /** The img view. */
                    private ImageView imgView;

                    /** The u. */
                    private Uri u;

                    /* (non-Javadoc)
                     * @see android.app.Activity#onCreate(android.os.Bundle)
                     */
                    @Override
                    protected void onCreate(Bundle savedInstanceState) {
                        // TODO Auto-generated method stub
                        super.onCreate(savedInstanceState);
                        setContentView(R.layout.activity_photo_options);

                        imgView=(ImageView)findViewById(R.id.imgDisplayImage);
                        btnPhotoCamera=(Button)findViewById(R.id.btnPhotoCamera);
                        btnPhotoGallery=(Button)findViewById(R.id.btnPhotoGallery);
                        btnCancel=(Button)findViewById(R.id.btnCancel);

                        btnPhotoCamera.setOnClickListener(new OnClickListener() {

                            public void onClick(View v) {

                                Intent camera=new Intent();
                                camera.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
                                camera.putExtra("crop", "true");

                                File f=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

                                u = Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"myFile.jpg"));
                                camera.putExtra(MediaStore.EXTRA_OUTPUT, u);
                                startActivityForResult(camera, PICK_IMAGE);
                            }
                        });

                        btnPhotoGallery.setOnClickListener(new OnClickListener() {

                            public void onClick(View v) {

                                Intent intent = new Intent(Intent.ACTION_PICK);
                                intent.setType("image/*");
                                startActivityForResult(intent, PICK_IMAGE_FROM_GALLERY);
                            }
                        });

                        btnCancel.setOnClickListener(new OnClickListener() {

                            public void onClick(View v) {

                                Intent goStartUp=new Intent(PhotoActivity.this, StartUpActivity.class);
                                goStartUp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                startActivity(goStartUp);
                                finish();
                            }
                        });
                    }

                    /* (non-Javadoc)
                     * @see android.app.Activity#onActivityResult(int, int, android.content.Intent)
                     */
                    @Override
                    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                        // TODO Auto-generated method stub
                        if (resultCode==RESULT_OK )
                        {
                            if(requestCode == PICK_IMAGE) {

                                InputStream is=null;
                                try {
                                    is = this.getContentResolver().openInputStream(u);
                                } catch (FileNotFoundException e) {
                                    e.printStackTrace();
                                }
                                Bitmap bmp=BitmapFactory.decodeStream(is);
                                imgView.setImageBitmap(bmp);
                                Log.i("Inside", "PICK_IMAGE");
                            }

                            if (requestCode == PICK_IMAGE_FROM_GALLERY) {
                                Uri selectedImage = data.getData();
                                String[] filePathColumn = { MediaStore.Images.Media.DATA };
                                Log.d("data",filePathColumn[0]);
                                Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
                                cursor.moveToFirst();
                                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                                String picturePath = cursor.getString(columnIndex);
                                cursor.close();
                                imgView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
                                Log.i("Inside", "PICK_IMAGE_FROM_GALLERY");
                            }
                        }
                    }
                }

XML File:

            <?xml version="1.0" encoding="utf-8"?>
            <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#f0f0f0" >
            <TextView
                android:id="@+id/lblSelectOptions"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginTop="20dp"
                android:text="@string/two_options"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textColor="#ff0000" />
            <Button
                android:id="@+id/btnPhotoCamera"
                android:layout_width="75dp"
                android:layout_height="wrap_content"
                android:layout_below="@+id/lblSelectOptions"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="10dp"
                android:text="@string/camera" />
            <Button
                android:id="@+id/btnPhotoGallery"
                android:layout_width="75dp"
                android:layout_height="wrap_content"
                android:layout_below="@+id/btnPhotoCamera"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="10dp"
                android:text="@string/gallery" />
            <Button
                android:id="@+id/btnCancel"
                android:layout_width="120dp"
                android:layout_height="wrap_content"
                android:layout_below="@+id/btnPhotoGallery"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="19dp"
                android:text="@string/cancel" />
            <TextView
                android:id="@+id/lblDisplayImage"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/btnCancel"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="10dp"
                android:text="@string/below_this_text_image_will_be_displayed"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#000000"
                android:textSize="13dp" />
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_below="@+id/lblDisplayImage"
                android:layout_centerInParent="true"
                android:layout_marginTop="10dp"
                android:gravity="bottom" >
                <!--
                     <ScrollView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" >
                -->
                <ImageView
                    android:id="@+id/imgDisplayImage"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_below="@+id/lblDisplayImage"
                    android:layout_centerInParent="true"
                    android:contentDescription="@string/area_where_image_is_to_be_displayed" />
                <!-- </ScrollView> -->
            </RelativeLayout>
        </RelativeLayout>

Also Modify the Android Manifest file as per your use with following:

<manifest....
  <uses-sdk
        android:minSdkVersion="3"
        android:targetSdkVersion="21" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_VIDEO" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />
<application....
..........
</application>
</manifest>
Kai
  • 38,985
  • 14
  • 88
  • 103
Hardik Vora
  • 414
  • 2
  • 9
0

Well, you will have to manually save the image either in SQL Lite or SD Card or wherever you want.

See this for storing image in SQLite

See this for storing image in SD Card

Haris Hasan
  • 29,856
  • 10
  • 92
  • 122
  • can you look at my new question here: http://stackoverflow.com/questions/6861820/saving-picture-to-a-file-and-retrieving-it/6861866#6861866 to see if I'm doing this correctly? – Kgrover Jul 28 '11 at 17:42