最近用到了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. 用fastboot大刷Android ~换个方法刷android手机
  2. [Android]ScrollView和ListView套用冲突的解决方法
  3. Android页面去掉标题全屏的方法-第一次用安卓试试看
  4. android 中使文本(TextView 、button等可参考)在屏幕正中心显示的
  5. android屏幕自适应4方法案例整合
  6. 打开SDK Manager检查Android SDK下载和更新失败的解决方法
  7. android studio 3.6.0 绑定视图新特性的方法
  8. androidSDK无法更新的解决方法之一
  9. android全屏去掉title栏的多种实现方法

随机推荐

  1. view随着键盘移动
  2. Android 状态栏透明
  3. Android——高德地图设置中心点和缩放比
  4. Android http协议实现文件下载
  5. Android一款界面良好使用简单的弹出框
  6. [置顶] Android 开发环境的配置
  7. Android仿抖音App 列表滑动 PagerSnapHel
  8. Shou.TV 招聘【北京】
  9. 如何获取Android设备名称(常用ADB命令介
  10. android解析二维数组对象key:value