Android 相機相簿呼叫封裝類
阿新 • • 發佈:2019-01-27
在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地址,也有其他的一些封裝類,能用到的可以參考一下