在app开发中相机相册的调用必不可少,但是涉及到很多类和方法的调用,使用起来很麻烦,因此对此进行一次封装很有必要,大大提高了开发效率,下面按照开发流程来展示一下代码
封装类 ImageUtils.java
调用相册:
/**
* 跳转到相册
*/
public static void openAlbum(Activity activity, int flag) {
Intent takePictureIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
if (takePictureIntent.resolveActivity(activity.getPackageManager()) != null) {// 相机被卸载时不会崩溃
activity.startActivityForResult(takePictureIntent, flag);
}
}
调用相机:
/**
* 跳转到相机(6.0及以下)
*
* @param activity
*/
public static void openbeforeCamera(Activity activity, Uri uri, int flag) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
activity.startActivityForResult(takePictureIntent, flag);
}
/**
* 7.0相机打开方式
* @param activity
* @param flag
* @return
*/
public static void openCamera70(Activity activity,Uri uri, int flag) {
// 激活相机
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
// 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMA
activity.startActivityForResult(intent, flag);
}
保存图片的uri路径:
/**
* 7.0保存方式
* @param activity
* @param file
* @return
*/
public static Uri getSaveUri70(Activity activity,File file){
//兼容android7.0 使用共享文件的形式
ContentValues contentValues = new ContentValues(1);
contentValues.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
Uri uri = activity.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
return uri;
}
/**
* 7.0以前保存方式
* @param file
* @return
*/
public static Uri getSaveUri(File file) {
Uri uri = Uri.fromFile(file);
return uri;
}
封装类中还有对图片进行压缩和裁剪,以及权限申请,检查,此处就不粘贴出来了
调用方法:
打开相册:
mFour.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageUtils.openAlbum(MainActivity.this,15);
}
});
打开相机:
mThree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
file = ImageUtils.createImageFile();
uri = ImageUtils.getSaveUriAll(MainActivity.this,file);
Log.d("tag","uri---"+uri);
ImageUtils.openCamera(MainActivity.this,uri,12);
}
});
回调:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d("tag","requestCode----"+requestCode);
//如果返回码是照相机返回码,就进行以下处理
if (requestCode == 12) {
Log.d("tag","uri-----2222-----"+uri);
ImageUtils.cropPhoto(this,uri,400,600,13,false); //裁剪
}else if (requestCode == 13){
Log.d("tag","data----"+data);
Log.d("tag","file------"+file.getAbsolutePath()+"-----uri-----"+uri);
Glide.with(MainActivity.this).load(uri).into(mImage);
// mImage.setImageURI(uri);
}else if (requestCode == 15){
Log.d("tag","data---------"+data);
if (data != null){
Uri contentUri = data.getData();
ImageUtils.cropPhoto(this,contentUri,400,600,17,true);
}
}else if (requestCode == 25){
Log.d("tag","data----"+data);
mImage.setImageURI(uri);
}else if (requestCode == 17){
Log.d("tag","data----17-----"+data);
if (data == null) {
return;
}
Bundle bundle = data.getExtras();
if (bundle != null){
Bitmap bitmap = bundle.getParcelable("data");
mImage.setImageBitmap(bitmap);
}
}
}
查看完整的代码, github地址,也有其他的一些封装类,能用到的可以参考一下