Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Taking pictures with camera on Android programmatically

I have created an app with a button and wrote onClickListener for that button. I have tried several sample code examples and none of them worked. They all bring up the Android camera app and don't take photographs. I want some code which I can put in my onClickListener so when I press the button on the screen, a picture will be taken.

How can I make the camera take a picture when I press a button in an Android activity?

like image 348
Kevik Avatar asked Jan 20 '13 04:01

Kevik


People also ask

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.

How do I take pictures of my Android phone automatically?

Focus and click on the Capture button on the camera app. Once you click on the Capture button, the timer will do a countdown, which you will be able to see on your device's screen. Once the countdown is up, your camera will take a picture, which will then be automatically saved in your device's gallery.


2 Answers

Look at following demo code.

Here is your XML file for UI,

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:orientation="vertical" >      <Button         android:id="@+id/btnCapture"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="Camera" />  </LinearLayout> 

And here is your Java class file,

public class CameraDemoActivity extends Activity {     int TAKE_PHOTO_CODE = 0;     public static int count = 0;      /** Called when the activity is first created. */     @Override     public void onCreate(Bundle savedInstanceState)     {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);          // Here, we are making a folder named picFolder to store         // pics taken by the camera using this application.         final String dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/picFolder/";         File newdir = new File(dir);         newdir.mkdirs();          Button capture = (Button) findViewById(R.id.btnCapture);         capture.setOnClickListener(new View.OnClickListener() {             public void onClick(View v) {                  // Here, the counter will be incremented each time, and the                 // picture taken by camera will be stored as 1.jpg,2.jpg                 // and likewise.                 count++;                 String file = dir+count+".jpg";                 File newfile = new File(file);                 try {                     newfile.createNewFile();                 }                 catch (IOException e)                 {                 }                  Uri outputFileUri = Uri.fromFile(newfile);                  Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);                 cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);                  startActivityForResult(cameraIntent, TAKE_PHOTO_CODE);             }         });     }      @Override     protected void onActivityResult(int requestCode, int resultCode, Intent data) {         super.onActivityResult(requestCode, resultCode, data);          if (requestCode == TAKE_PHOTO_CODE && resultCode == RESULT_OK) {             Log.d("CameraDemo", "Pic saved");         }     } } 

Note:

Specify the following permissions in your manifest file,

<uses-permission android:name="android.permission.CAMERA"/>  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
like image 199
Mehul Joisar Avatar answered Sep 19 '22 08:09

Mehul Joisar


There are two ways to take a photo:

1 - Using an Intent to make a photo

2 - Using the camera API

I think you should use the second way and there is a sample code here for two of them.

like image 24
hm1984ir Avatar answered Sep 18 '22 08:09

hm1984ir