最近用到了android中的照相机功能,android中实现拍照的方式有两种,一种是调用系统自带的照相机进行拍照,此种方法较为简单,因为是android本身就已经实现了的;另一种就是自己来实现一个拍照程序,可按照自己的方式来定义下面都附带两种方法的实现,仅供大家参考啊!

第一种,调用android自带拍照功能:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
最关键的一步就是这里,调用系统的照相程序,接着实现下相片的保存地址就可以了,这是最简单也比较实用的一种方法,
此种方法唯一的缺点就是界面无法改造了,只能用系统的。

第二种,自写android拍照功能(较为复杂):

public class ScanBarZBarActivity extends Activity implements SurfaceHolder.Callback{private static String TAG = "ScanBarZBarActivity";private Camera mCamera;//拍照、保存、继续拍    private Button mButton, mButton1, mButton2;    private SurfaceView mSurfaceView;    private SurfaceHolder holder;    private AutoFocusCallback mAutoFocusCallback = new AutoFocusCallback();    private String path = "lanjingling";//图片所在文件夹名    private String path1;    private Bitmap bmp;    private Calendar c;    public native String getISBN(Bitmap bmp);    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            /* 隐藏状态栏 */            this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,                            WindowManager.LayoutParams.FLAG_FULLSCREEN);            /* 隐藏标题栏 */            requestWindowFeature(Window.FEATURE_NO_TITLE);            /* 屏幕显示可转换 */            this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);                       setContentView(R.layout.camera);            /* SurfaceHolder设定 */            mSurfaceView = (SurfaceView) findViewById(R.id.mSurfaceView);            holder = mSurfaceView.getHolder();            holder.addCallback(ScanBarZBarActivity.this);            holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);            c = Calendar.getInstance();            /* Button初始化 */            mButton = (Button) findViewById(R.id.myButton);            mButton1 = (Button) findViewById(R.id.myButton1);            mButton2 = (Button) findViewById(R.id.myButton2);            /* 拍照Button的事件处理 */            mButton.setOnClickListener(new Button.OnClickListener() {            @Override                    public void onClick(View arg0) {                            /* 告动对焦后拍照 */                            mCamera.autoFocus(mAutoFocusCallback);                    }            });            /* Button的事件处理 */              mButton1.setOnClickListener(new Button.OnClickListener() {                    @Override                    public void onClick(View arg0) {                            /* 保存文件 */                    Log.i(TAG,"click button2");                            if (bmp != null) {                                    /* 检查SDCard是否存在 */                                    if (!Environment.MEDIA_MOUNTED.equals(Environment                                                    .getExternalStorageState())) {                                            /* SD卡不存在,显示Toast信息 */                                            Toast.makeText(ScanBarZBarActivity.this,                                                            "SD卡不存在!无法保存相片,请插入SD卡。", Toast.LENGTH_LONG).show();                                    } else {                                            try {                                                    /* 文件不存在就创建 */                                                    File f = new File(Environment                                                                    .getExternalStorageDirectory(), path);                                                    Log.i(TAG,"click button2:" + f.getAbsolutePath());                                                    if (!f.exists()) {                                                            f.mkdir();                                                    }                                                    /* 保存相片文件 */                                                    path1 = String.valueOf(c.get(Calendar.MILLISECOND))                                                                    + "camera.jpg";                                                    File n = new File(f, path1);                                                    FileOutputStream bos = new FileOutputStream(n                                                                    .getAbsolutePath());                                                    /* 文件转换 */                                                    bmp.compress(Bitmap.CompressFormat.JPEG, 100, bos);                                                    bos.flush();                                                    bos.close();                                                    Toast.makeText(ScanBarZBarActivity.this,                                                                    path1 + "保存成功!", 1).show();                                                                                       } catch (Exception e) {                                                    e.printStackTrace();                                            }                                    }                            }                            mButton.setVisibility(View.VISIBLE);                            mButton1.setVisibility(View.VISIBLE);                            mButton2.setVisibility(View.VISIBLE);                                                }            });            /* 点击继续拍照 */            mButton2.setOnClickListener(new Button.OnClickListener() {                    @Override                    public void onClick(View v) {                    Log.i(TAG, mCamera.toString());                    initCamera();                    }            });    }    @Override    public void surfaceCreated(SurfaceHolder surfaceholder) {            try {                    /* 打开相机, */                    mCamera = Camera.open();                    mCamera.setPreviewDisplay(holder);                    Log.i(TAG,"create camera---");            } catch (IOException exception) {                    mCamera.release();                    mCamera = null;            }    }    @Override    public void surfaceChanged(SurfaceHolder surfaceholder, int format, int w,                    int h) {            /* 相机初始化 */    Log.i(TAG,"init camera");            initCamera();    }    @Override    public void surfaceDestroyed(SurfaceHolder surfaceholder) {    Log.i(TAG,"destoryed camera");            stopCamera();            mCamera.release();            mCamera = null;    }    /* 拍照的method */    private void takePicture() {            if (mCamera != null) {            Log.i(TAG,"takePicture");                    mCamera.takePicture(shutterCallback, rawCallback, jpegCallback);            }    }    private ShutterCallback shutterCallback = new ShutterCallback() {            public void onShutter() {            }    };    private PictureCallback rawCallback = new PictureCallback() {            public void onPictureTaken(byte[] _data, Camera _camera) {            }    };    private PictureCallback jpegCallback = new PictureCallback() {            public void onPictureTaken(byte[] _data, Camera _camera) {                    /* 取得相仞 */                    try {                            /* 设定Button可见性 */                            mButton.setVisibility(View.VISIBLE);                            mButton1.setVisibility(View.VISIBLE);                            mButton2.setVisibility(View.VISIBLE);                            /* 取得Bitmap对象 */                            bmp = BitmapFactory.decodeByteArray(_data, 0, _data.length);                                                       } catch (Exception e) {                            e.printStackTrace();                    }            }    };    /* 告定义class AutoFocusCallback */    public final class AutoFocusCallback implements                    android.hardware.Camera.AutoFocusCallback {            public void onAutoFocus(boolean focused, Camera camera) {                    /* 对到焦点拍照 */                    if (focused) {                            takePicture();                    }            }    };    /* 相机初始化的method */    private void initCamera() {            if (mCamera != null) {                    try {                            Camera.Parameters parameters = mCamera.getParameters();                                                        parameters.setPictureFormat(PixelFormat.JPEG);                            parameters.setPictureSize(1024, 768);                            mCamera.setParameters(parameters);                            /* 开启预览画面 */                            mCamera.startPreview();                            Log.i(TAG, "init camera!!!!!!------");                    } catch (Exception e) {                            e.printStackTrace();                    }            }    }    /* 停止相机的method */    private void stopCamera() {            if (mCamera != null) {                    try {                            /* 停止预览 */                            mCamera.stopPreview();                    } catch (Exception e) {                            e.printStackTrace();                    }            }    }}
附上camera.xml中的代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><SurfaceView android:id="@+id/mSurfaceView"  android:layout_width="700sp"  android:layout_height="fill_parent"  android:layout_weight="1" /> <Button android:id="@+id/myButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button" android:layout_alignParentRight="true" android:layout_alignParentBottom="true" /> <Button android:id="@+id/myButton1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button1" android:layout_alignParentRight="true" android:layout_above="@id/myButton" /> <Button android:id="@+id/myButton2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button2" android:layout_alignParentRight="true" android:layout_above="@id/myButton1" /></RelativeLayout>
最后别忘了加上权限,不然没办法使用哦!
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-feature android:name="android.hardware.camera"/>



更多相关文章

  1. Android的Application中onCreate执行多次解决方案
  2. android前后摄像头切换
  3. android中实现带图片和checkbox的listview
  4. Eclipse Android(安卓)SDK Manager下载失败解决
  5. android日历之滚动选择日期类似ios
  6. Android调用系统摄像头拍照并剪裁压缩
  7. android的init.rc文件的语法
  8. Android联系人读取操作笔记
  9. Android写Logcat文件保存到SD卡

随机推荐

  1. 深入了解Serializable接口
  2. 表格和用户注册
  3. zabbix4.0监控PG数据库感受
  4. 高逼格企业级MySQL数据库备份方案,原来是
  5. 【每天一题】php面试时,你是否经常被问到?
  6. 窥探redis为何会变慢
  7. 【每天一题】PHP中常用的数组操作方法笔
  8. 这些PHP考点虽然简单基础,但是很重点
  9. PHP实现财务审核通过后返现金额到客户的
  10. 强大!Nginx 配置在线一键生成“神器”