【问题标题】:Image crop is not working in android 7.0图像裁剪在 android 7.0 中不起作用
【发布时间】:2017-06-23 01:48:05
【问题描述】:

当我裁剪图像时,应用程序在 android 7.0 中崩溃。

例外: 02-06 12:40:53.717 5671-5685/com.tribyte.iTutor2 E/DatabaseUtils:向包裹写入异常 java.lang.SecurityException: Permission Denial: writing android.support.v4.content.FileProvider uri content://com.tribyte.iTutor2.provider/external_files/Android/data/com.tribyte.iTutor2/files/Application/sites/ default/files/askexpertimages/325590_user1aipmt@gmail.com_1486365038955_crop.png from pid=6784, uid=10105 需要导出提供者,或者 grantUriPermission() 在 android.content.ContentProvider.enforceWritePermissionInner(ContentProvider.java:682) 在 android.content.ContentProvider$Transport.enforceWritePermission(ContentProvider.java:497) 在 android.content.ContentProvider$Transport.enforceFilePermission(ContentProvider.java:469) 在 android.content.ContentProvider$Transport.openAssetFile(ContentProvider.java:384) 在 android.content.ContentProviderNative.onTransact(ContentProviderNative.java:262) 在 android.os.Binder.execTransact(Binder.java:565)

示例代码:

private void performCrop()
{
try 
{
Intent intent = new Intent("com.android.camera.action.CROP");
List<ResolveInfo> resInfoList = this.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
this.grantUriPermission(packageName, temppicUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}

String extension = android.webkit.MimeTypeMap.getFileExtensionFromUrl(picUri.toString());
String mimetype = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);

intent.setDataAndType(picUri,mimetype);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putExtra("crop", "true");
intent.putExtra(MediaStore.EXTRA_OUTPUT, temppicUri);
intent.putExtra("outputX", 512);
intent.putExtra("outputY", 512);
intent.putExtra("aspectX", 0);
intent.putExtra("aspectY", 0);
//start the activity - we handle returning in onActivityResult
if (intent.resolveActivity(getPackageManager()) != null) 
{
intent.putExtra("return-data", true);   
startActivityForResult(intent, PIC_CROP);
}
}
catch(ActivityNotFoundException anfe)
{
//display an error message
String errorMessage = "Whoops - your device doesn't support the crop action!";
Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
toast.show();
}    
}

【问题讨论】:

  • 您是否在清单中设置了 WRITE_EXTERNAL_STORAGE 权限?
  • 我已授予 READ/WRITE 外部存储的权限。

标签: android


【解决方案1】:

以我有限的经验,我认为是OOM引起的。代码如下,

intent.putExtra("outputX", 512); intent.putExtra("outputY", 512);

512*512 的尺寸在屏幕分辨率更高的高质量设备中太大。如果图片很大,您可以缩小其尺寸。

【讨论】:

    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 2023-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    相关资源
    最近更新 更多