为了账号安全,请及时绑定邮箱和手机立即绑定

Android 相机调用简化工具

标签:
Android

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


由于涉及到向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;
            }
        }
    }

运行截图:
调用相机

裁剪图片

显示位图

点击查看更多内容
5人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消