打开相机一般来说有两种方式,一种是自己初始化相机,调用Camera组件,相对来说这种比较复杂,需要做的工作也比较多,还有一种是调用相机的隐式Intent打开相机,打开相机选择图片这种需求其实调用隐式Intent就可以了,没必要自己初始化camera对象。
下面是介绍的是如何打开camera相机;
/**
* 初始化相机控件
*/
private void openCamera() {
String state = Environment.getExternalStorageState();
if (state.equals(Environment.MEDIA_MOUNTED)) {
// 部分机型更改了action的值,这里尽量使用系统定义的常量
Intent getImageByCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (TextUtils.isEmpty(H5Constant.bigPicPath)) {
H5Constant.bigPicPath = SysConfig.SD_IMAGE_PATH + H5Constant.tempImage;
}
// 将相机所拍摄图片保存在临时目录
getImageByCamera.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(H5Constant.bigPicPath)));
// 添加隐士intent跳转的判断,若没有对应的activity,则不做处理
if (getImageByCamera.resolveActivity(h5Activity.getPackageManager()) != null) {
h5Activity.startActivityForResult(getImageByCamera, H5Constant.h5CameraCode);
}
} else {
Toast.makeText(h5Activity, "请确认已经插入SD卡", Toast.LENGTH_LONG).show();
}
}
首先是判断SD卡的状态,然后创建打开相机的Intent对象,同时设置参数将相机拍照的相片保存在指定目录用于我们后期的裁剪,旋转,压缩等操作;
这里有一个需要注意的地方时,在使用友盟测试的时候,部分机型调用如下代码会报错:
Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");
这是由于不同的系统修改的隐式intent的字符串值…,所以我们尽量使用系统的常量,并增加判断,该intent是否有对应的activity:
if (getImageByCamera.resolveActivity(h5Activity.getPackageManager()) != null) {