解决Android图片裁剪与7.0相机崩溃问题的代码实践
88 浏览量
更新于2024-09-04
收藏 139KB PDF 举报
"Android调用系统图片裁剪限定尺寸及7.0照相问题的解决方法"
在Android开发中,有时我们需要调用系统自带的图片裁剪功能,让用户选择并裁剪图片,同时可能还会遇到在Android 7.0及以上版本中调用相机导致应用崩溃的问题。本文将详细讲解如何解决这些问题。
首先,让我们来看看如何调用系统图片裁剪功能并限定裁剪尺寸。在Android中,我们可以使用`Intent`来启动系统提供的图片裁剪服务。以下是一个简单的示例:
```java
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(selectedImageUri, "image/*");
cropIntent.putExtra("outputX", 500); // 设定裁剪后的宽度
cropIntent.putExtra("outputY", 500); // 设定裁剪后的高度
cropIntent.putExtra("aspectX", 1); // 宽度比例
cropIntent.putExtra("aspectY", 1); // 高度比例
cropIntent.putExtra("scale", true); // 是否允许放大缩小图片
cropIntent.putExtra("return-data", true); // 返回裁剪后的数据
startActivityForResult(cropIntent, CROP_IMAGE_REQUEST_CODE);
```
这段代码中,`selectedImageUri`是用户选择的图片的URI,`CROP_IMAGE_REQUEST_CODE`是你自定义的请求码,用于识别裁剪操作的结果。通过`putExtra`方法,我们可以设置裁剪的尺寸比例和是否允许缩放。
然而,在Android 7.0及以上版本,由于权限管理的变更,直接调用相机可能导致应用崩溃。为了解决这个问题,你需要确保在运行时动态获取相机和存储权限:
```java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED
|| ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_CAMERA);
}
```
当用户授权后,你才能安全地启动相机。启动相机的`Intent`如下:
```java
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE);
}
```
在接收相机返回结果的`onActivityResult`方法中,你可以处理裁剪图片的操作:
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST_CODE && resultCode == RESULT_OK) {
// 从相机获取的原始图片
Bitmap bitmap = (Bitmap) data.getExtras().get("data");
// 这里可以保存到本地或者进行其他操作
// ...
// 启动裁剪
Uri imageUri = saveImageToExternalStorage(bitmap); // 自定义方法,保存图片到外部存储
startCropImageIntent(imageUri);
} else if (requestCode == CROP_IMAGE_REQUEST_CODE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap croppedBitmap = extras.getParcelable("data");
// 使用裁剪后的图片
// ...
}
}
}
private Uri saveImageToExternalStorage(Bitmap bitmap) {
// 实现保存图片到外部存储的方法
// ...
return savedImageUri;
}
private void startCropImageIntent(Uri imageUri) {
// 启动裁剪Intent,如上面的裁剪代码
// ...
}
```
以上代码展示了如何在Android中正确调用系统图片裁剪功能,并解决了在Android 7.0及以上版本调用相机可能出现的问题。确保在实际开发中适配不同版本的Android系统,以提供更好的用户体验。
2020-08-31 上传
2021-01-04 上传
2021-01-04 上传
2021-01-20 上传
2019-03-25 上传
2019-07-29 上传
2024-02-27 上传
2023-12-29 上传
2020-08-27 上传
weixin_38555229
- 粉丝: 8
- 资源: 928
最新资源
- Angular实现MarcHayek简历展示应用教程
- Crossbow Spot最新更新 - 获取Chrome扩展新闻
- 量子管道网络优化与Python实现
- Debian系统中APT缓存维护工具的使用方法与实践
- Python模块AccessControl的Windows64位安装文件介绍
- 掌握最新*** Fisher资讯,使用Google Chrome扩展
- Ember应用程序开发流程与环境配置指南
- EZPCOpenSDK_v5.1.2_build***版本更新详情
- Postcode-Finder:利用JavaScript和Google Geocode API实现
- AWS商业交易监控器:航线行为分析与营销策略制定
- AccessControl-4.0b6压缩包详细使用教程
- Python编程实践与技巧汇总
- 使用Sikuli和Python打造颜色求解器项目
- .Net基础视频教程:掌握GDI绘图技术
- 深入理解数据结构与JavaScript实践项目
- 双子座在线裁判系统:提高编程竞赛效率