解决Android图片裁剪与7.0相机崩溃问题的代码实践
194 浏览量
更新于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 上传
2018-05-28 上传
2024-01-19 上传
2018-06-01 上传
440 浏览量
weixin_38555229
- 粉丝: 8
- 资源: 928
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍