来源:小编 更新:2025-02-19 04:47:14
用手机看
你有没有遇到过这种情况?手机里拍了一张美美的照片,想裁剪一下做个头像或者发个朋友圈,结果发现怎么也裁剪不了,急得你抓耳挠腮。别担心,今天就来教你一招,轻松解决安卓7.0调用系统裁剪的问题!
你知道吗?安卓7.0系统为了提高私有文件的安全性,对file:// Uri类型的Uri做出了限制,这可让不少APP的功能无法正常使用。就拿头像裁剪来说,之前可能只是修改了拍照的Uri,却忘记了裁剪时也要用新的Uri,结果直接使用系统裁剪就出了问题。
那么,如何解决这个问题呢?下面就来教你几招,让你轻松应对安卓7.0裁剪难题!
首先,拍照后要保存到外部存储,这样才能获取到正确的Uri。你可以这样操作:
```java
public void startPhotoZoom(Uri uri) {
File CropPhoto = new File(getExternalCacheDir(), \crop.jpg\);
try {
if (CropPhoto.exists()) CropPhoto.delete();
CropPhoto.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
cropImageUri = Uri.fromFile(CropPhoto);
Intent intent = new Intent(\com.android.camera.action.CROP\);
intent.setDataAndType(uri, \image/\);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
// 添加这一句表示对目标应用临时授权
接下来,使用Intent启动裁剪功能。这里要注意,如果你的设备是华为等品牌,可能需要特殊处理,否则裁剪出来的图片会显示为圆形。
```java
Intent intent = new Intent(\com.android.camera.action.CROP\);
intent.setDataAndType(uri, \image/\);
if (android.os.Build.MODEL.contains(\HUAWEI\)) {
// 华为特殊处理,否则会显示圆
intent.putExtra(\aspectX\, 9998);
intent.putExtra(\aspectY\, 9999);
} else {
intent.putExtra(\aspectX\, 1);
intent.putExtra(\aspectY\, 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra(\outputX\, 200);
intent.putExtra(\outputY\, 200);
startActivityForResult(intent, REQUEST_CROP);
在onActivityResult中获取裁剪后的图片。这里要注意,如果你的设备是华为等品牌,可能需要特殊处理,否则裁剪出来的图片会显示为圆形。
```java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CROP && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = (Bitmap) extras.get(\data\);
// 这里可以保存裁剪后的图片或者进行其他操作
}
}
在使用以上方法时,还有一些注意事项需要你注意:
1. 确保你的APP已经申请了相应的权限,例如访问相机和存储等。
2. 在调用裁剪功能之前,先检查设备是否支持该功能。
3. 如果你的设备是华为等品牌,可能需要特殊处理,否则裁剪出来的图片会显示为圆形。
通过以上方法,相信你已经能够轻松解决安卓7.0调用系统裁剪的问题了。快来试试吧,让你的手机拍照更加得心应手!