初学者 - 如何拍摄照片? Android应用程序

时间:2014-03-02 13:26:22

标签: java android android-camera

我是Android编程新手。在我的应用程序中,我只有一个按钮 - 捕获。基本上,当点击巨型按钮时,应用程序会拍照并保存。

问题是,它会创建一个“mediaFile”,但不会保存它。有人可以查看代码,看看有什么问题吗?

package com.nhakfvi.spycam;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.hardware.Camera.PictureCallback;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

private Camera mCamera;
private CameraPreview mPreview;
static int count=0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button captureButton = (Button) findViewById(R.id.button_capture);

    // Create an instance of Camera
    mCamera = getCameraInstance();
    // Create our Preview view and set it as the content of our activity.
    mPreview = new CameraPreview(this, mCamera);
    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
    preview.addView(mPreview);
    mCamera.setDisplayOrientation(90);

    final PictureCallback mPicture = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {
            File pictureFile = getOutputMediaFile();
            if (pictureFile == null) {
                return;
            }

            try {
                FileOutputStream fos = new FileOutputStream(pictureFile);
                fos.write(data);
                fos.close();
                MediaStore.Images.Media.insertImage(getContentResolver(),
                        pictureFile.getAbsolutePath(),
                        pictureFile.getName(), pictureFile.getName());
            } catch (FileNotFoundException e) {
            } catch (IOException e) {
            }
        }
    };

    // Add a listener to the Capture button
    captureButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            count_plus_one();

            // get an image from the camera
            mCamera.takePicture(null, null, mPicture);
            System.out.println(getOutputMediaFileUri());
            mCamera.stopPreview();
            mCamera.startPreview();

        }
    });

}

public void count_plus_one() {
    count++;
    TextView tv1 = (TextView)findViewById(R.id.textView1);
    tv1.setText(""+count);
}

/** A safe way to get an instance of the Camera object. */
public static Camera getCameraInstance() {
    Camera c = null;
    try {
        c = Camera.open(); // attempt to get a Camera instance
    } catch (Exception e) {
        // Camera is not available (in use or does not exist)
    }
    return c; // returns null if camera is unavailable
}

@Override
protected void onPause() {
    super.onPause();
    releaseCamera(); // release the camera immediately on pause event
}

private void releaseCamera() {
    if (mCamera != null) {
        mCamera.release(); // release the camera for other applications
        mCamera = null;
    }
}

/** Create a file Uri for saving an image or video */
private static Uri getOutputMediaFileUri(){
      return Uri.fromFile(getOutputMediaFile());
}

/** Create a File for saving an image or video */
private static File getOutputMediaFile(){
    // To be safe, you should check that the SDCard is mounted
    // using Environment.getExternalStorageState() before doing this.

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
              Environment.DIRECTORY_PICTURES), "MyCameraApp");
    // This location works best if you want the created images to be shared
    // between applications and persist after your app has been uninstalled.

    // Create the storage directory if it does not exist
    if (! mediaStorageDir.exists()){
        if (! mediaStorageDir.mkdirs()){
            System.out.println("MyCameraApp" + "failed to create directory");
            return null;
        }
    }

    // Create a media file name
    String timeStamp = new SimpleDateFormat("HH-mm-ss_dd-MM-yyyy_").format(new Date());
    File mediaFile;
        mediaFile = new File(mediaStorageDir.getPath() + File.separator +
        "IMG_"+ timeStamp +(count)+ ".jpg");
    return mediaFile;
}
}

注意:我想要用户界面,用户点击一个激活方法onClick的大按钮。 单击捕获按钮后,我没有收到任何错误。

感谢帮助者!

0 个答案:

没有答案