同福

Android访问相册打开照片或者调用相机拍摄照片的方法

介绍

介绍

福哥要在tfhomeapp里面增加用户头像上传的功能。本来是想直接通过H5实现,后来发现H5在不同的手机的浏览器上兼容性还有问题,这个真的是无法忍受。最后决定直接通过APP来实现访问手机相册或者调用相机来实现了。

访问相册

使用Android访问系统相册很简单,通过Intent的动作调用系统相册。再通过startActivityForResult捕获用户选择图片的结果进行处理。

代码

public void openAlbum(Activity activity){
    Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.setType("image/*");
    activity.startActivityForResult(intent, RESULT_OPEN_ALBUM);
}

调用相机

使用Android访问系统相机的方法类似,通过Intent的动作调用系统相机。再通过startActivityForResult捕获用户拍摄照片的结果进行处理。

代码

public void openCamera(Activity activity){
    Intent intent;
    intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    activity.startActivityForResult(intent, RESULT_OPEN_CAMERA);
}

相册选择照片回调

在用户选择了一张照片后会触发onActivityResult事件,然后我们就可以在这个方法里面进行照片选择操作的结果处理了。

回调方法传入onActivityResult返回的Intent,返回的是一个Bitmap图片对象。

代码

public Bitmap onOpenAlbum(Intent data){
    Bitmap bitmap = null;

    if (data != null) {
        // 照片的原始资源地址
        Uri uri = data.getData();
        String path = uri.getPath();
        ContentResolver cr = context.getContentResolver();
        try {
            bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri));

            return bitmap;
        }
        catch (FileNotFoundException e) {

        }
    }

    return null;
}

相机拍摄照片回调

在用户使用相机拍摄一张照片并且选择确定后会触发onActivityResult事件,然后我们就可以在这个方法里面进行照片拍摄操作的结果处理了。

回调方法传入onActivityResult返回的Intent,返回的是一个Bitmap图片对象。

代码

public Bitmap onOpenCamera(Intent data){
    Bitmap bitmap = null;

    if(data != null){
        Bundle extras = data.getExtras();
        if (extras != null) {
            bitmap = extras.getParcelable("data");

            return bitmap;
        }
    }

    return null;
}

总结

Android开发是真的太容易了,原本很臃肿很繁琐的Java编程在Android这里变得太简单了,开发起来太舒服了。访问相册、调用相机这些系统级别的操作,简简单单20多行代码就搞定了,不要太爽哦~~