AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="cn.camera"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk android:minSdkVersion="8" /><uses-permission android:name="android.permission.CAMERA" />   <uses-feature android:name="android.hardware.camera" />   <uses-feature android:name="android.hardware.camera.autofocus" />  <uses-permission android:name="android.permission.FLASHLIGHT"/>    <uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/><uses-permission android:name="android.permission.RESTART_PACKAGES"/>    <application        android:icon="@drawable/ic_launcher"        android:label="@string/app_name" >        <activity            android:name=".CameraActivity"            android:label="@string/app_name"             android:screenOrientation="landscape"             >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>


main.xml
<?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:baselineAligned="false"     android:orientation="horizontal" >        <FrameLayout    android:id="@+id/camera_preview"    android:layout_width="0dip"    android:layout_height="fill_parent"    android:layout_weight="1"    /><LinearLayout    android:layout_width="wrap_content"   android:layout_height="fill_parent"   android:gravity="center"   android:orientation="vertical"    >    <Button         android:id="@+id/button_capture"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:layout_marginBottom="5dip"        android:text="@string/Capture"        />    <Button         android:id="@+id/button_camera"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:layout_marginBottom="5dip"        android:text="@string/Camera"        /></LinearLayout></LinearLayout>


strings.xml
<?xml version="1.0" encoding="utf-8"?><resources>    <string name="hello">Hello World, CameraActivity!</string>    <string name="app_name">Camera</string> <string name="Capture">拍照</string>      <string name="Camera">返回</string>  </resources>


CameraActivity.java
package cn.camera;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTask;import android.app.Activity;import android.hardware.Camera;import android.hardware.Camera.AutoFocusCallback;import android.hardware.Camera.PictureCallback;import android.hardware.Camera.ShutterCallback;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.Window;import android.view.WindowManager;import android.widget.Button;import android.widget.FrameLayout;public class CameraActivity extends Activity {/** Called when the activity is first created. *//** 图片媒体类型 **/      public static final int MEDIA_TYPE_IMAGE = 1;   /** 摄像头类的对象 **/      private Camera mCamera;      /** 拍照按钮 **/      private Button captureButton;      /** 返回摄像头 **/      private Button cameraButton;      /** SurfaceView对象 **/      private CameraPreview mPreview; @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);  Window window = getWindow();// 得到窗口  this.requestWindowFeature(Window.FEATURE_NO_TITLE);window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏          window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 保持屏幕亮          setContentView(R.layout.main);         captureButton = (Button) findViewById(R.id.button_capture);          captureButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 启动自动对焦mCamera.autoFocus(new AutoFocusCallback() {@Overridepublic void onAutoFocus(boolean success, Camera camera) {// TODO Auto-generated method stub}});Timer timer = new Timer();timer.schedule(new TimerTask(){@Overridepublic void run() {//拍照函数mCamera.takePicture(mShutter, null, mPicture);}}, 1750);}});                cameraButton = (Button) findViewById(R.id.button_camera);          cameraButton.setOnClickListener(new OnClickListener() {                @Override              public void onClick(View v) {                  // 返回按钮(拍完照片之后需要重新启动Camera的Preview)                  mCamera.startPreview();              }          });          // 获取Camera对象的实例          mCamera = getCameraInstance();          // 初始化SurfaceView          mPreview = new CameraPreview(this,mCamera);          mPreview.setZOrderOnTop(true);               FrameLayout  preview = (FrameLayout ) findViewById(R.id.camera_preview);          // 将SurfaceView添加到FrameLayout中          preview.addView(mPreview);          // 设置相机的属性          Camera.Parameters params = mCamera.getParameters();          // JPEG质量设置到最好          params.setJpegQuality(100);          // 散光灯模式设置为自动调节          params.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO);          mCamera.setParameters(params);  }public static Camera getCameraInstance() {          Camera c = null;          try {              c = Camera.open();          } catch (Exception e) {              e.printStackTrace();          }          return c;      }   // 快门的回调函数实现      private ShutterCallback mShutter = new ShutterCallback() {          @Override          public void onShutter() {            }      };          // PictureCallback回调函数实现      private PictureCallback mPicture = new PictureCallback() {          @Override          public void onPictureTaken(byte[] data, Camera camera) {              File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE);              if (pictureFile == null) {                  return;              }              // 将照片数据data写入指定的文件              try {                  FileOutputStream fos = new FileOutputStream(pictureFile);                  fos.write(data);                        fos.close();                  //拍照完成后,上传图片//                Log.e("upload","length:"+ pictureFile.length());//                Upload.uploadPhoto(pictureFile.getPath());            } catch (FileNotFoundException e) {                  e.printStackTrace();              } catch (IOException e) {                  e.printStackTrace();              } finally{            mCamera.startPreview();              //通过Intent传递图片路径  ,拍照完成后,显示图片到屏幕              /*  Intent intent = new Intent();                  intent.putExtra("picPath", pictureFile.getPath());                intent.setClass(CameraActivity.this, PhotoViewActivity.class);                startActivity(intent);                  */            }        }      };  /**      * 在指定路径创建照片文件      *       * @param type      * @return      */      public static File getOutputMediaFile(int type) {          // 指定照片存放的目录,在SD根目录下的一个文件夹中          File mediaStorageDir = new File(                  Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),                  "CameraUseApp");                // 文件夹不存在,则创建该文件夹          if (!mediaStorageDir.exists()) {              if (!mediaStorageDir.mkdirs()) {                  Log.d("CameraUse", "failed to create directory");                  return null;              }          }          String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss")                  .format(new Date());          // 创建照片文件          File mediaFile;                if (type == MEDIA_TYPE_IMAGE) {              mediaFile = new File(mediaStorageDir.getPath() + File.separator                      + "101_20120326195110.jpg");              System.out.println(mediaFile.getPath());                   } else {              return null;          }          return mediaFile;      }          // 释放Camera对象(务必实现)      private void releaseCamera() {          if (mCamera != null) {              mCamera.release();              mCamera = null;          }      }         @Override      public boolean onTouchEvent(MotionEvent event) {          // 触摸屏幕自动对焦          if (event.getAction() == MotionEvent.ACTION_DOWN) {              mCamera.autoFocus(new AutoFocusCallback() {                  @Override                  public void onAutoFocus(boolean success, Camera camera) {                    }              });          }          return super.onTouchEvent(event);      }        @Override      protected void onPause() {          super.onPause();          releaseCamera();      }  }


CameraPreview.java
package cn.camera;import java.io.IOException;import android.content.Context;import android.graphics.PixelFormat;import android.hardware.Camera;import android.util.Log;import android.view.SurfaceHolder;import android.view.SurfaceView;public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {private SurfaceHolder mHolder;      private Camera mCamera; public CameraPreview(Context context, Camera camera) {super(context);mCamera = camera;          mHolder = this.getHolder();          mHolder.addCallback(this);          mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);          mHolder.setFormat(PixelFormat.TRANSPARENT);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { if (mHolder.getSurface() == null)  { System.out.println("mHolder.getSurface() == null");  return;   }        try {          mCamera.stopPreview();             mCamera.setPreviewDisplay(mHolder);              mCamera.startPreview();        } catch (IOException e) {          Log.d("surfaceChanged", "Error starting camera preview: " + e.getMessage());        }  }@Overridepublic void surfaceCreated(SurfaceHolder holder) {        try {              mCamera.setPreviewDisplay(holder);              mCamera.startPreview();          } catch (IOException e) {          Log.d("surfaceCreated", "Error setting camera preview: " + e.getMessage());        }  }@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {}}

更多相关文章

  1. Android Studio 3.0以后打包修改文件名方法
  2. Android 下载文件至SD卡,并用progressBar显示下载进度
  3. Android 文件IO总结
  4. Android--取出SDcard卡上指定后缀名的文件
  5. AndroidManifest.xml文件详解(service)
  6. Android 实现 选择文件对话框
  7. Android attrs文件(自定义)属性详解
  8. Android 使用AsyncHttpClient文件上传与下载

随机推荐

  1. 一文搞懂PHP类和对象、抽象类、接口
  2. 如何通过imagick让PHP生成PSD文件缩略图(
  3. 实例详解php cookie与session会话基本用
  4. PHP 中的 -> 和 :: 的区别
  5. php判断复选框是否被选中的方法
  6. 关于编译安装msgpack-php的方法
  7. 新手入门PHP必知的七种数据类型
  8. PHP性能优化利器:生成器
  9. 对php-cli环境的理解
  10. php根据数组中某一字段来实现排序