解决: android11 系统裁剪图片
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了解决: android11 系统裁剪图片,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2923字,纯文字阅读大概需要5分钟。
内容图文
FileProvider.getUriForFile 请自行查阅资料
public void startPhotoZoom(Uri uri){
if(uri == null)
{
finish();
return;
}
String name = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) +"cut.jpg";
File CropPhoto = new File(getExternalCacheDir(), name);
//m_ResultImagePath = CropPhoto.getPath();
mPhotoUri = Uri.fromFile(CropPhoto);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
{
CropPhoto = uriToFileApiQ(uri, context);
mPhotoUri = FileProvider.getUriForFile(context,
getPackageName() + ".fileprovider", CropPhoto);
}
headPath = CropPhoto.getPath();
Intent intent = new Intent("com.android.camera.action.CROP");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
{
intent.setDataAndType(mPhotoUri, "image/*");
}
else
{
intent.setDataAndType(uri, "image/*");
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION ); //添加这一句表示对目标应用临时授权该Uri所代表的文件
}
intent.putExtra("crop", "true");
intent.putExtra("scale", true);
if(Build.MANUFACTURER.equals("HUAWEI")) {
intent.putExtra("aspectX", 9998);
intent.putExtra("aspectY", 9999);
}
else {
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
}
intent.putExtra("outputX", headWidth);
intent.putExtra("outputY", headHight);
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, mPhotoUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
//intent.putExtra("noFaceDetection", true); // no face detection
try {
startActivityForResult(intent, RESULT_REQUEST_CODE);//这里的RESULT_REQUEST_CODE是在startActivityForResult里使用的返回值。
} catch (Exception e) {
// 解决截取后部分机型秒退
e.printStackTrace();
}
}
uriToFileApiQ函数:
@TargetApi(Build.VERSION_CODES.Q)
public static File uriToFileApiQ(Uri uri, Context context) {
File file = null;
if(uri == null) return file;
//android10以上转换
if (uri.getScheme().equals(ContentResolver.SCHEME_FILE)) {
file = new File(uri.getPath());
} else if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
//把文件复制到沙盒目录
ContentResolver contentResolver = context.getContentResolver();
String displayName = System.currentTimeMillis()+ Math.round((Math.random() + 1) * 1000)
+"."+ MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(uri));
// 注释掉的方法可以获取到原文件的文件名,但是比较耗时
// Cursor cursor = contentResolver.query(uri, null, null, null, null);
// if (cursor.moveToFirst()) {
// String displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));}
try {
InputStream is = contentResolver.openInputStream(uri);
File cache = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath(), displayName);
FileOutputStream fos = new FileOutputStream(cache);
FileUtils.copy(is, fos);
file = cache;
fos.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return file;
}
内容总结
以上是互联网集市为您收集整理的解决: android11 系统裁剪图片全部内容,希望文章能够帮你解决解决: android11 系统裁剪图片所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。