直接上代码
定义需要用到的接口
public interface UserCenterModel { /** * 拍照 * @param context */ void getFileByPhotograph(Context context); /** * 相册 * @param context */ void getFileByPhotoAlbum(Context context); /** * 创建img文件 * @return */ File getImagefile(); /** * 开始拍照 * @param context */ void startPhotograph(Context context); /** * 调用相册 * @param context */ void startPhotoAlbum(Context context); /** * 剪裁图片 * @param activity */ void startClip(Activity activity, File file); /** * API24 以上调用 * @param context * @param imageFile * @return */ Uri getImageContentUri(Context context, File imageFile);}接口实现类
public class UserCenterRealize implements UserCenterModel { @Override public void getFileByPhotograph(Context context) { Activity activity = (Activity) context; if (AppConsts.mBuildVersion >= 23) { if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { //申请相机权限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CAMERA}, AppConsts.MY_PERMISSIONS_REQUEST_CAMERA); } else { if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申请读SD权限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, AppConsts.MY_PERMISSIONS_REQUEST_READ_SD); } else { if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申请写SD权限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, AppConsts.MY_PERMISSIONS_REQUEST_WRITE_SK); } else { startPhotograph(activity); } } } } else { //拍照 startPhotograph(activity); } } @Override public File getImagefile() { File mediaStorageDir = null; File mediaFile = null; try { mediaStorageDir = new File(Environment.getExternalStorageDirectory().toString() + "/IMAGE/"); Log.d("创建文件夹成功", mediaStorageDir.toString()); } catch (Exception e) { e.PRintStackTrace(); Log.d("创建文件夹失败", mediaStorageDir.toString()); } if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { Log.d("创建文件失败", "WRITE_EXTERNAL_STORAGE 权限"); return null; } } // Create a media file name String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); mediaFile = new File(mediaStorageDir.getPath() + File.separator + "IMG_" + timeStamp + ".jpg"); Log.d("创建文件成功",mediaFile.toString()); return mediaFile; } @Override public void getFileByPhotoAlbum(Context context) { Activity activity= (Activity) context; if (AppConsts.mBuildVersion >= 23) { if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申请读SD权限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, AppConsts.MY_PERMISSIONS_REQUEST_READ_SD_PHOTOALBUM); } else { if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { //申请写SD权限 ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, AppConsts.MY_PERMISSIONS_REQUEST_WRITE_SK_PHOTOALBUM); } else { startPhotoAlbum(context); } } } else { startPhotoAlbum(context); } } @Override public void startPhotoAlbum(Context context) { if(!BitmapUtils.existSDCard()){ Toast.makeText(context, "未检测到SD卡", Toast.LENGTH_SHORT).show(); return; } Activity a= (Activity) context; Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(AppConsts.IMAGE_TYPE); a.startActivityForResult(getAlbum, AppConsts.LOAD_IMAGE_REQUEST); } @Override public void startPhotograph(Context context) { if(!BitmapUtils.existSDCard()){ Toast.makeText(context, "未检测到SD卡", Toast.LENGTH_SHORT).show(); return; } Activity activity= (Activity) context; if (AppConsts.mBuildVersion<24){ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); mImageFile=getImagefile(); intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(mImageFile)); activity.startActivityForResult(intent, AppConsts.CAPTURE_IMAGE_REQUEST); }else { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ContentValues contentValues = new ContentValues(1); mImageFile=getImagefile(); contentValues.put(MediaStore.Images.Media.DATA, mImageFile.getAbsolutePath()); Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); activity.startActivityForResult(intent, AppConsts.CAPTURE_IMAGE_REQUEST); } } @Override public void startClip(Activity activity, File file) { if(null == file){ return; } mOutFile=getImagefile(); Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(getImageContentUri(activity,file),AppConsts.IMAGE_TYPE); intent.putExtra("crop", "true"); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", 180); intent.putExtra("outputY", 180); intent.putExtra("scale", true); intent.putExtra("return-data", false); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mOutFile)); intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); intent.putExtra("noFaceDetection", true); activity.startActivityForResult(intent, AppConsts.CLIP_IMAGE_REQUEST); } @Override public Uri getImageContentUri(Context context, File imageFile) { String filePath = imageFile.getAbsolutePath(); Uri uri=null; Cursor cursor = context.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Images.Media._ID }, MediaStore.Images.Media.DATA + "=? ", new String[] { filePath }, null); if (cursor != null && cursor.moveToFirst()) { int id = cursor.getInt(cursor .getColumnIndex(MediaStore.MediaColumns._ID)); Uri baseUri = Uri.parse("content://media/external/images/media"); uri= Uri.withAppendedPath(baseUri, "" + id); } else { if (imageFile.exists()) { ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.DATA, filePath); uri= context.getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); } else { uri= null; } } return uri; }}新闻热点
疑难解答