Android 相机调用简化工具

来源:互联网 发布:曾经爆红的网络歌曲 编辑:程序博客网 时间:2024/05/16 19:20

调用安卓相机的代码稍微有点复杂,我将其进行了包装,简化调用的过程。
这个包装类能实现:调用相机、修改尺寸、获得位图 这三个基本功能。


由于涉及到向SD卡中写数据的操作,因此需要在 AndroidManifest.xml 中声明权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

创建一个 TakePhoto 类,代码如下:

import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Environment;import android.provider.MediaStore;import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;public class TakePhoto {    private String imagePath;    private String imageName;    private Uri imageUri;    public TakePhoto() {        //默认保存在SD卡根目录        imagePath = Environment.getExternalStorageDirectory().toString();        imageName = "output_image.jpg";    }    public TakePhoto(String imagePath, String imageName) {        //自定义路径及文件名        this.imagePath = imagePath;        this.imageName = imageName;    }    //调用相机    public Uri invokeCamera(Context context) {        createUri();        Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);        //启动相机程序        context.startActivity(intent);        return imageUri;    }    //裁剪相片    public Uri editPicture(Context context) {        Intent intent = new Intent("com.android.camera.action.CROP");        intent.setDataAndType(imageUri, "image/*");        intent.putExtra("scale", true);        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);        //启动裁剪程序        context.startActivity(intent);        return imageUri;    }    //生成Uri对象    private void createUri() {        File outputImage = new File(imagePath, imageName);        try {            //生成空白文件            if (outputImage.exists()) {                outputImage.delete();            }            outputImage.createNewFile();        } catch (IOException e) {            e.printStackTrace();        }        imageUri = Uri.fromFile(outputImage);    }    //得到Bitmap对象    public Bitmap getBitmap(Context context) {        try {            return BitmapFactory.decodeStream(context.getContentResolver().openInputStream(imageUri));        } catch (FileNotFoundException e) {            e.printStackTrace();        }        return null;    }}

最后在 Activity 中测试,核心代码如下:

    class OnClick implements View.OnClickListener {        TakePhoto takePhoto = new TakePhoto();        @Override        public void onClick(View v) {            switch (v.getId()) {                case R.id.btn1:                    //调用相机                    takePhoto.invokeCamera(MyActivity.this);                    break;                case R.id.btn2:                    //修改尺寸                    takePhoto.editPicture(MyActivity.this);                    break;                case R.id.btn3:                    //获得图片                    Bitmap bitmap = takePhoto.getBitmap(MyActivity.this);                    imageView.setImageBitmap(bitmap);                    break;                default:                    break;            }        }    }

运行截图:
调用相机

裁剪图片

显示位图

0 0